Command Palette
Search for a command to run...
brandfound. API
API for tracking brand mentions in AI assistants (ChatGPT, Gemini, Claude, Perplexity). Manage companies, products, competitors, queries, mentions, and analytics.
Base URL
https://app.brandfound.ai/api/v1Playground
Click in the request panel to open the interactive Playground. Pick an API key, set parameters, and send the request directly from the docs.
curl -H "Authorization: Bearer gfx_YOUR_API_KEY" \ https://app.brandfound.ai/api/v1/companies{ "success": true, "data": { "...": "..." }}{ "success": false, "error": { "code": "NOT_FOUND", "message": "Not found" }}120 / min60 / minUNAUTHORIZEDInvalid authorizationFORBIDDENInsufficient permissionsNOT_FOUNDResource not foundVALIDATION_ERRORValidation errorRATE_LIMIT_EXCEEDEDRate limit exceededINTERNAL_ERRORInternal errorWhat is new in version 1.2
Public method URLs have not changed, backward compatibility is preserved.
Analytics responds again
Methods of the Analytics, Links and Advertising sections returned a 500 error because of an issue on our side. Fixed, no action needed from you.
Query state is visible
The query list now has answersCount, the actual list of assistants in providers and a summary queue.status. Previously providers was always empty.
Polling queue
queries/queue and queue/summary show what is being polled and what it costs. Polls stopped for lack of FoxCoin are resumed via queue/resume: they do not restart on their own.
Balance and spending
billing/balance returns the balance and prices of all operations, billing/transactions returns the charge history with the related query.
Answer language
The language field now sets the answer language. Works in ChatGPT, Gemini, Perplexity and DeepSeek.
Assistant directory
The sources method returns available assistants and marks the ones used by default.
Monitoring
A query can be put on recurring polling with its own schedule. This used to be available in the web app only.
AI traffic
Site visits coming from AI answers, visitor behaviour, funnel and goals based on Yandex.Metrica data.
Commerce
Product cards in AI answers and the catalogue to match them against.
Company is now required
The links, links/filter-options, analytics/links/top-domains, analytics/competitors/preview and advertising methods require companyId. Without it the response used to merge all companies of the account.
For AI assistants
Copy the API instructions and pass them to an AI assistant (ChatGPT, Claude, Gemini, etc.) — it will be able to compose requests to the brandfound. API for you. The API key is not included in the copied text.
Next to each method and section there is a button — it copies the description of a specific method or the whole category.
The API key is not included — paste it separately or use the Playground.
Authentication
All API requests require authorization. Create an API key in Settings → API keyssection. Keys have the prefix gfx_.
Pass the key in the Authorization header of each request.
The web app automatically uses the session-token cookie. No extra setup is required.
curl -X GET "https://app.brandfound.ai/api/v1/companies" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": [ { "id": "comp_123", "name": "My company", "slug": "my-company" } ], "meta": { "total": 1, "limit": 20, "offset": 0, "hasMore": false }}Workspaces
Окружения (workspaces / teams). Один OAuth-токен умеет работать со всеми окружениями, к которым у user есть доступ (свой + ACCEPTED TeamMember). Активное окружение хранится в ApiKey.activeAccountId — переключение персистентно и видно всем MCP-клиентам этого ключа на следующем запросе. Доступ проверяется на каждом запросе: при потере членства middleware молча возвращается к accountId, выданному при OAuth, без 401. Побочный эффект переключения: preferredCompanyId сбрасывается, т.к. он привязан к старому окружению.
Список доступных окружений
/api/v1/workspacesВозвращает все workspaces (accountId), к которым у текущего user есть доступ: собственный + ACCEPTED TeamMember. Поле `isCurrent: true` помечает то окружение, на котором сейчас работает API key (с учётом activeAccountId override).
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/workspacescurl -X GET "https://app.brandfound.ai/api/v1/workspaces" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": { "workspaces": [ { "accountId": "example_accountId", "role": "owner", "ownerName": "example_ownerName", "ownerEmail": "example_ownerEmail", "companiesCount": 0, "isCurrent": true, "teamRoleName": "example_teamRoleName", "teamRoleKey": "example_teamRoleKey" } ], "currentAccountId": "example_currentAccountId", "tokenAccountId": "example_tokenAccountId", "activeAccountId": "example_activeAccountId" }}Successful response
Переключить активное окружение для текущего API key
/api/v1/workspaces/switchОбновляет ApiKey.activeAccountId. Эффект персистентный — применяется ко ВСЕМ следующим запросам этого ключа (в том числе из других MCP-клиентов). При accountId=null сбрасывает override и возвращает поведение к токеновскому accountId. Побочный эффект: preferredCompanyId сбрасывается в null (привязана к старому окружению). Только для аутентификации через API key.
Request body
accountIdstringrequiredUUID workspace для переключения. null = сбросить активный override и вернуться к accountId, выданному при OAuth.
Responses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED403application/jsonНеобходима авторизация
UNAUTHORIZED429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/workspaces/switchcurl -X POST "https://app.brandfound.ai/api/v1/workspaces/switch" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "accountId": "7b2f1d4e-8c9a-4e5b-b6c2-3d7a1f8e9c4b"}'{ "success": true, "data": { "apiKeyId": "example_apiKeyId", "tokenAccountId": "example_tokenAccountId", "activeAccountId": "example_activeAccountId", "effectiveAccountId": "example_effectiveAccountId", "preferredCompanyIdReset": true }}Successful response
Companies
Управление компаниями
Список компаний
/api/v1/companiesВозвращает список компаний пользователя с продуктами, конкурентами и ключевыми словами.
Query parameters
offsetinteger= 0Смещение для пагинации
limitinteger= 20Количество записей на страницу
sortBystring= createdAtcreatedAtupdatedAtnamelastUsedAtsortOrderstring= descПорядок сортировки
ascdescsearchstringПоисковый запрос (case-insensitive)
categoryIdstring (uuid)Фильтр по категории
countrystringФильтр по стране
createdAtFromstring (date-time)Начало диапазона даты создания (ISO 8601)
createdAtTostring (date-time)Конец диапазона даты создания (ISO 8601)
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/companiescurl -X GET "https://app.brandfound.ai/api/v1/companies" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": [ { "id": "clx1abc2d0001abcdef123456", "name": "Samsung", "description": "Samsung Electronics", "url": "https://samsung.com", "country": "South Korea", "categoryId": "cat-uuid-001", "lastUsedAt": "2026-04-06T10:00:00.000Z", "createdAt": "2026-01-15T08:00:00.000Z", "products": [ { "id": "prod-001", "name": "Galaxy S25" } ], "competitors": [ { "id": "comp-001", "name": "Apple" } ], "keywords": [], "category": { "id": "cat-uuid-001", "name": "Electronics" } } ], "meta": { "total": 1, "limit": 20, "offset": 0, "hasMore": false }}Successful response
Создать компанию
/api/v1/companiesСоздает новую компанию. Лимит зависит от тарифного плана.
Request body
namestringrequireddescriptionstringurlstringcategoryIdstringcountrystringISO 3166-1 alpha-2 («AE»). Legacy-названия («russia») принимаются и нормализуются. Предпочтительнее regionTargets — это поле легаси.
synonymsstring[]Синонимы/альтернативные названия (макс. 20)
regionTargetsobject[]Страны и города замера. ПОЛНОЕ состояние: старые таргеты пересоздаются. Primary-таргет задаёт страну и язык автоподбора семантики.
defaultLanguageIdstringЯзык генерируемых запросов (GET /api/v1/geo/languages).
defaultResponseLanguageIdstringЯзык, на котором должна отвечать нейросеть.
defaultLocalestringBCP-47, например «ar-AE».
Responses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/companiescurl -X POST "https://app.brandfound.ai/api/v1/companies" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Samsung", "description": "Samsung Electronics — мировой лидер в области электроники", "url": "https://samsung.com", "country": "South Korea", "synonyms": [ "Samsung Electronics", "Самсунг" ]}'{ "success": true, "data": { "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "name": "Samsung", "description": "Samsung Electronics — мировой лидер в области электроники", "url": "https://samsung.com", "categoryId": null, "country": "South Korea", "synonyms": [ "Samsung Electronics", "Самсунг" ], "isAutoGenerationEnabled": true, "lastUsedAt": null, "createdAt": "2026-04-07T12:00:00.000Z", "updatedAt": "2026-04-07T12:00:00.000Z" }}Successful response
Получить компанию
/api/v1/companies/{id}Возвращает полную информацию о компании, включая продукты, конкурентов и ключевые слова.
Query parameters
idstring (uuid)requiredID компании
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND/api/v1/companies/{id}curl -X GET "https://app.brandfound.ai/api/v1/companies/{id}" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": { "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "name": "Samsung", "description": "Samsung Electronics — мировой лидер в области электроники", "url": "https://samsung.com", "categoryId": null, "country": "South Korea", "synonyms": [ "Samsung Electronics", "Самсунг" ], "isAutoGenerationEnabled": true, "lastUsedAt": "2026-04-06T18:00:00.000Z", "createdAt": "2026-01-15T12:00:00.000Z", "updatedAt": "2026-04-06T18:00:00.000Z", "products": [ { "id": "prod-001", "name": "Galaxy S25", "description": "Flagship smartphone 2026", "url": "https://samsung.com/galaxy-s25", "keywords": [ { "id": "kw-001", "text": "galaxy s25" } ], "competitors": [ { "id": "comp-001", "name": "iPhone 16", "keywords": [ { "id": "kw-002", "text": "iphone 16" } ] } ] } ], "competitors": [ { "id": "comp-002", "name": "Apple", "url": "https://apple.com", "keywords": [ { "id": "kw-003", "text": "apple" } ] } ], "keywords": [ { "id": "kw-004", "text": "samsung" } ], "category": { "id": "cat-001", "name": "Электроника" } }}Successful response
Обновить компанию
/api/v1/companies/{id}Частичное обновление компании. Передавайте только изменяемые поля. Регионализация: regionTargets задают страны и города замера, primary-таргет определяет страну и язык автоподбора семантики (POST /api/v1/queries/autogenerate). countryId / cityId берутся из GET /api/v1/geo/countries и /api/v1/geo/cities, defaultLanguageId — из /api/v1/geo/languages. regionTargets в теле = ПОЛНОЕ состояние: старые таргеты пересоздаются. Поле isAutoGenerationEnabled устарело: включение (true) ИГНОРИРУЕТСЯ. Это был флаг снесённого планировщика, который генерировал запросы и тем же движением ставил их в платный опрос.
Query parameters
idstring (uuid)requiredID компании
Request body
namestringdescriptionstringurlstringcategoryIdstringcountrystringISO 3166-1 alpha-2 («AE»). Legacy-названия («russia») принимаются и нормализуются. Предпочтительнее regionTargets — это поле легаси.
synonymsstring[]isAutoGenerationEnabledbooleanУСТАРЕЛО и ИГНОРИРУЕТСЯ при значении true. Это флаг снесённого планировщика: он генерировал запросы и тем же движением ставил их в платный опрос. Автоподбор без опроса — POST /api/v1/queries/autogenerate.
regionTargetsobject[]Страны и города замера. ПОЛНОЕ состояние: старые таргеты пересоздаются. Primary-таргет задаёт страну и язык автоподбора семантики.
defaultLanguageIdstringЯзык генерируемых запросов (GET /api/v1/geo/languages).
defaultResponseLanguageIdstringЯзык, на котором должна отвечать нейросеть.
defaultLocalestringBCP-47, например «ar-AE».
autogenQueryTypesstring[]Типы запросов автоподбора. По умолчанию commercial, informational, comparative, reputational. Убрать отсюда comparative — и сравнительный контур («X vs Y») исчезнет из генерируемой семантики.
autogenQueriesPerRunintegerResponses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/companies/{id}curl -X PUT "https://app.brandfound.ai/api/v1/companies/{id}" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Samsung Electronics", "description": "Updated description", "synonyms": [ "Samsung", "Самсунг", "삼성" ]}'{ "success": true, "data": { "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "name": "Samsung Electronics", "description": "Updated description", "url": "https://samsung.com", "categoryId": null, "country": "South Korea", "synonyms": [ "Samsung", "Самсунг", "삼성" ], "isAutoGenerationEnabled": true, "lastUsedAt": "2026-04-06T18:00:00.000Z", "createdAt": "2026-01-15T12:00:00.000Z", "updatedAt": "2026-04-07T14:00:00.000Z" }}Successful response
Архивировать компанию
/api/v1/companies/{id}Архивирование компании. Данные сохраняются, но компания не отображается в списках.
Query parameters
idstring (uuid)requiredID компании
Responses
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/companies/{id}curl -X DELETE "https://app.brandfound.ai/api/v1/companies/{id}" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"// No ContentSuccessfully deleted
Справочник отраслей
/api/v1/companies/categoriesДопустимые значения categoryId для создания и обновления компании.
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/companies/categoriescurl -X GET "https://app.brandfound.ai/api/v1/companies/categories" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": [ { "id": "example_id", "name": "example_name" } ]}Successful response
Products
Управление продуктами
Список продуктов
/api/v1/productsВозвращает список продуктов с привязанными компаниями, ключевыми словами и конкурентами.
Query parameters
offsetinteger= 0Смещение для пагинации
limitinteger= 20Количество записей на страницу
sortBystring= createdAtcreatedAtupdatedAtnamesortOrderstring= descПорядок сортировки
ascdesccompanyIdstring (uuid)Фильтр по компании
searchstringПоисковый запрос (case-insensitive)
createdAtFromstring (date-time)Начало диапазона даты создания (ISO 8601)
createdAtTostring (date-time)Конец диапазона даты создания (ISO 8601)
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/productscurl -X GET "https://app.brandfound.ai/api/v1/products" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": [ { "id": "prod-001", "name": "Galaxy S25", "description": "Flagship smartphone", "url": "https://samsung.com/galaxy-s25", "createdAt": "2026-02-01T10:00:00.000Z", "company": { "id": "comp-uuid", "name": "Samsung" }, "keywords": [], "competitors": [ { "id": "comp-001", "name": "iPhone 16" } ] } ], "meta": { "total": 1, "limit": 20, "offset": 0, "hasMore": false }}Successful response
Создать продукт
/api/v1/productsСоздает новый продукт, привязанный к компании.
Request body
namestringrequiredcompanyIdstringrequireddescriptionstringurlstringResponses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/productscurl -X POST "https://app.brandfound.ai/api/v1/products" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Galaxy S25", "companyId": "clx1abc2d0001abcdef123456", "description": "Flagship smartphone 2026", "url": "https://samsung.com/galaxy-s25"}'{ "success": true, "data": { "id": "prod-002", "name": "Galaxy S25", "description": "Flagship smartphone 2026", "url": "https://samsung.com/galaxy-s25", "companyId": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "createdAt": "2026-04-07T12:00:00.000Z", "updatedAt": "2026-04-07T12:00:00.000Z" }}Successful response
Получить продукт
/api/v1/products/{id}Возвращает полную информацию о продукте, включая ключевые слова и конкурентов.
Query parameters
idstring (uuid)requiredID продукта
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND/api/v1/products/{id}curl -X GET "https://app.brandfound.ai/api/v1/products/{id}" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": { "id": "prod-001", "name": "Galaxy S25", "description": "Flagship smartphone 2026", "url": "https://samsung.com/galaxy-s25", "companyId": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "createdAt": "2026-01-15T12:00:00.000Z", "updatedAt": "2026-04-06T18:00:00.000Z", "company": { "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "name": "Samsung" }, "keywords": [ { "id": "kw-001", "text": "galaxy s25" } ], "competitors": [ { "id": "comp-001", "name": "iPhone 16", "url": "https://apple.com/iphone-16", "keywords": [ { "id": "kw-002", "text": "iphone 16" } ] } ] }}Successful response
Обновить продукт
/api/v1/products/{id}Частичное обновление продукта.
Query parameters
idstring (uuid)requiredID продукта
Request body
namestringdescriptionstringurlstringResponses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/products/{id}curl -X PUT "https://app.brandfound.ai/api/v1/products/{id}" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Galaxy S25 Ultra", "description": "Updated flagship"}'{ "success": true, "data": { "id": "prod-001", "name": "Galaxy S25 Ultra", "description": "Updated flagship", "url": "https://samsung.com/galaxy-s25", "companyId": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "createdAt": "2026-01-15T12:00:00.000Z", "updatedAt": "2026-04-07T14:00:00.000Z" }}Successful response
Архивировать продукт
/api/v1/products/{id}Архивирование продукта. Данные сохраняются, но продукт не отображается в списках.
Query parameters
idstring (uuid)requiredID продукта
Responses
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/products/{id}curl -X DELETE "https://app.brandfound.ai/api/v1/products/{id}" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"// No ContentSuccessfully deleted
Competitors
Управление конкурентами
Список конкурентов
/api/v1/competitorsВозвращает список конкурентов с привязанными компаниями, продуктами и ключевыми словами.
Query parameters
offsetinteger= 0Смещение для пагинации
limitinteger= 20Количество записей на страницу
sortBystring= createdAtcreatedAtupdatedAtnamesortOrderstring= descПорядок сортировки
ascdesccompanyIdstring (uuid)Фильтр по компании
productIdstring (uuid)Фильтр по продукту
searchstringПоисковый запрос (case-insensitive)
createdAtFromstring (date-time)Начало диапазона даты создания (ISO 8601)
createdAtTostring (date-time)Конец диапазона даты создания (ISO 8601)
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/competitorscurl -X GET "https://app.brandfound.ai/api/v1/competitors" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": [ { "id": "comp-001", "name": "Apple", "url": "https://apple.com", "createdAt": "2026-01-20T10:00:00.000Z", "company": { "id": "comp-uuid", "name": "Samsung" }, "product": null, "keywords": [] } ], "meta": { "total": 1, "limit": 20, "offset": 0, "hasMore": false }}Successful response
Создать конкурента
/api/v1/competitorsСоздает нового конкурента. Может быть привязан к компании или к конкретному продукту.
Request body
namestringrequiredcompanyIdstringrequiredproductIdstringurlstringResponses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/competitorscurl -X POST "https://app.brandfound.ai/api/v1/competitors" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Apple", "companyId": "clx1abc2d0001abcdef123456", "url": "https://apple.com"}'{ "success": true, "data": { "id": "comp-003", "name": "Apple", "url": "https://apple.com", "companyId": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "productId": null, "createdAt": "2026-04-07T12:00:00.000Z", "updatedAt": "2026-04-07T12:00:00.000Z" }}Successful response
Получить конкурента
/api/v1/competitors/{id}Возвращает полную информацию о конкуренте с ключевыми словами.
Query parameters
idstring (uuid)requiredID конкурента
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND/api/v1/competitors/{id}curl -X GET "https://app.brandfound.ai/api/v1/competitors/{id}" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": { "id": "comp-001", "name": "Apple", "url": "https://apple.com", "companyId": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "productId": null, "createdAt": "2026-01-15T12:00:00.000Z", "updatedAt": "2026-04-06T18:00:00.000Z", "company": { "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "name": "Samsung" }, "product": null, "keywords": [ { "id": "kw-003", "text": "apple" }, { "id": "kw-005", "text": "apple inc" } ] }}Successful response
Обновить конкурента
/api/v1/competitors/{id}Обновляет имя и/или URL конкурента.
Query parameters
idstring (uuid)requiredID конкурента
Request body
namestringurlstringResponses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/competitors/{id}curl -X PUT "https://app.brandfound.ai/api/v1/competitors/{id}" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Apple Inc.", "url": "https://www.apple.com"}'{ "success": true, "data": { "id": "comp-001", "name": "Apple Inc.", "url": "https://www.apple.com", "companyId": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "productId": null, "createdAt": "2026-01-15T12:00:00.000Z", "updatedAt": "2026-04-07T14:00:00.000Z" }}Successful response
Архивировать конкурента
/api/v1/competitors/{id}Архивирование конкурента. Данные сохраняются, но конкурент не отображается в списках.
Query parameters
idstring (uuid)requiredID конкурента
Responses
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/competitors/{id}curl -X DELETE "https://app.brandfound.ai/api/v1/competitors/{id}" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"// No ContentSuccessfully deleted
Keywords
Интенты (keywords): создание, переименование, архивирование/удаление, restore, bulk attach/detach к компаниям/продуктам/конкурентам
Список интентов (keywords)
/api/v1/keywordsВозвращает интенты (keywords) текущего workspace. Фильтр по target — companyId | productId | competitorId (только один). state контролирует выборку по архиву: active (по умолчанию) / archived / all.
Query parameters
offsetinteger= 0Смещение для пагинации
limitinteger= 20Количество записей на страницу
sortBystring= createdAtcreatedAtnamesortOrderstring= descПорядок сортировки
ascdescstatestring= activeLifecycle фильтр: active (не архивные, по умолчанию), archived (только архивные), all.
activearchivedallsearchstringCase-insensitive подстрока по name.
companyIdstring (uuid)Только интенты с активной связью с этой компанией.
productIdstring (uuid)Только интенты с активной связью с этим продуктом.
competitorIdstring (uuid)Только интенты с активной связью с этим конкурентом.
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/keywordscurl -X GET "https://app.brandfound.ai/api/v1/keywords" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": [ { "id": "example_id", "name": "example_name", "userId": "example_userId", "createdAt": "2026-01-15T12:00:00Z", "archivedAt": "2026-01-15T12:00:00Z", "companyKeywords": [ { "id": "example_id", "companyId": "example_companyId", "company": { "id": "example_id", "name": "example_name" } } ], "productKeywords": [ { "id": "example_id", "productId": "example_productId", "product": { "id": "example_id", "name": "example_name" } } ], "competitorKeywords": [ { "id": "example_id", "competitorId": "example_competitorId", "competitor": { "id": "example_id", "name": "example_name" } } ] } ], "meta": { "total": 1, "limit": 1, "offset": 1, "hasMore": true }}Successful response
Создать (или переиспользовать) интент
/api/v1/keywordsFind-or-create по (name, userId). Если интент уже существует — он переиспользуется (и разархивируется, если был в архиве). Опциональный attach: { companyId | productId | competitorId } — ровно один — привязывает интент к target в одной транзакции.
Request body
namestringrequiredattachobjectTarget для привязки/отвязки. Должен содержать РОВНО ОДИН из полей.
Responses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/keywordscurl -X POST "https://app.brandfound.ai/api/v1/keywords" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "best AI smartphone 2026", "attach": { "productId": "0d7e6b3f-1a2c-4f5e-9876-abcdef012345" }}'{ "success": true, "data": { "keyword": { "id": "example_id", "name": "example_name", "userId": "example_userId", "createdAt": "2026-01-15T12:00:00Z", "archivedAt": "2026-01-15T12:00:00Z", "companyKeywords": [ { "id": "example_id", "companyId": "example_companyId", "company": { "id": "example_id", "name": "example_name" } } ], "productKeywords": [ { "id": "example_id", "productId": "example_productId", "product": { "id": "example_id", "name": "example_name" } } ], "competitorKeywords": [ { "id": "example_id", "competitorId": "example_competitorId", "competitor": { "id": "example_id", "name": "example_name" } } ] }, "attach": "..." }}Successful response
Получить интент
/api/v1/keywords/{id}Возвращает интент с активными связями к компаниям, продуктам, конкурентам.
Query parameters
idstring (uuid)requiredResponses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND/api/v1/keywords/{id}curl -X GET "https://app.brandfound.ai/api/v1/keywords/{id}" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": { "id": "example_id", "name": "example_name", "userId": "example_userId", "createdAt": "2026-01-15T12:00:00Z", "archivedAt": "2026-01-15T12:00:00Z", "companyKeywords": [ { "id": "example_id", "companyId": "example_companyId", "company": { "id": "example_id", "name": "example_name" } } ], "productKeywords": [ { "id": "example_id", "productId": "example_productId", "product": { "id": "example_id", "name": "example_name" } } ], "competitorKeywords": [ { "id": "example_id", "competitorId": "example_competitorId", "competitor": { "id": "example_id", "name": "example_name" } } ] }}Successful response
Переименовать интент
/api/v1/keywords/{id}Единственное редактируемое поле — name. Архивированный интент переименовать нельзя (используйте restore сначала).
Query parameters
idstring (uuid)requiredRequest body
namestringrequiredResponses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/keywords/{id}curl -X PUT "https://app.brandfound.ai/api/v1/keywords/{id}" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "best AI smartphone 2026"}'{ "success": true, "data": { "id": "example_id", "name": "example_name", "userId": "example_userId", "createdAt": "2026-01-15T12:00:00Z", "archivedAt": "2026-01-15T12:00:00Z", "companyKeywords": [ { "id": "example_id", "companyId": "example_companyId", "company": { "id": "example_id", "name": "example_name" } } ], "productKeywords": [ { "id": "example_id", "productId": "example_productId", "product": { "id": "example_id", "name": "example_name" } } ], "competitorKeywords": [ { "id": "example_id", "competitorId": "example_competitorId", "competitor": { "id": "example_id", "name": "example_name" } } ] }}Successful response
Архивировать или удалить интент
/api/v1/keywords/{id}По умолчанию архивирует (soft-delete) интент вместе со всеми его связями — обратимо через POST /restore. С ?permanent=true физически удаляет интент из БД (требует, чтобы он уже был в архиве или имел архивные связи). С ?dryRun=true возвращает отчёт о том, что будет затронуто, без выполнения операции.
Query parameters
idstring (uuid)requiredpermanentboolean= falseПри true — необратимое удаление из БД. Требует архивного состояния.
dryRunboolean= falseПри true — отчёт без побочных эффектов.
Responses
204Successfully deleted
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/keywords/{id}curl -X DELETE "https://app.brandfound.ai/api/v1/keywords/{id}" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": { "keywordId": "example_keywordId", "archivedAt": "2026-01-15T12:00:00Z", "archivedLinks": { "company": 0, "product": 0, "competitor": 0 }, "mode": "archive", "dryRun": true, "wouldArchive": { "keyword": true, "links": { "company": 0, "product": 0, "competitor": 0 } }, "wouldDelete": { "keyword": true, "links": { "company": 0, "product": 0, "competitor": 0 }, "mentionRefs": 0 }, "alreadyArchived": true, "keyword": { "id": "example_id", "name": "example_name", "userId": "example_userId", "createdAt": "2026-01-15T12:00:00Z", "archivedAt": "2026-01-15T12:00:00Z", "companyKeywords": [ { "id": "example_id", "companyId": "example_companyId", "company": { "id": "example_id", "name": "example_name" } } ], "productKeywords": [ { "id": "example_id", "productId": "example_productId", "product": { "id": "example_id", "name": "example_name" } } ], "competitorKeywords": [ { "id": "example_id", "competitorId": "example_competitorId", "competitor": { "id": "example_id", "name": "example_name" } } ] } }}Successful response
Восстановить интент из архива
/api/v1/keywords/{id}/restoreСнимает archivedAt с keyword и со всех его архивных связей, чьи родительские сущности (company / product / competitor) ещё живы. Связи к удалённым target остаются архивными.
Query parameters
idstring (uuid)requiredResponses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/keywords/{id}/restorecurl -X POST "https://app.brandfound.ai/api/v1/keywords/{id}/restore" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": { "keywordId": "example_keywordId", "restoredLinks": { "company": 0, "product": 0, "competitor": 0 } }}Successful response
Bulk attach интентов к target
/api/v1/keywords/attachДля каждого name делает find-or-create по (name, userId), затем гарантирует активную связь с target. Архивированные связи разархивирует. Target требует РОВНО ОДИН из companyId / productId / competitorId.
Request body
targetobjectrequiredTarget для привязки/отвязки. Должен содержать РОВНО ОДИН из полей.
namesstring[]requiredResponses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/keywords/attachcurl -X POST "https://app.brandfound.ai/api/v1/keywords/attach" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "target": { "productId": "0d7e6b3f-1a2c-4f5e-9876-abcdef012345" }, "names": [ "best 2026 AI phone", "battery life smartphone" ]}'{ "success": true, "data": { "target": { "companyId": "example_companyId", "productId": "example_productId", "competitorId": "example_competitorId" }, "attached": [ { "keywordId": "example_keywordId", "name": "example_name" } ], "alreadyAttached": [ { "keywordId": "example_keywordId", "name": "example_name" } ], "reactivated": [ { "keywordId": "example_keywordId", "name": "example_name" } ] }}Successful response
Bulk detach интентов от target
/api/v1/keywords/detachАрхивирует активные связи keyword↔target. Сам интент остаётся жить и может быть привязан к другим target. Target требует РОВНО ОДИН из companyId / productId / competitorId.
Request body
targetobjectrequiredTarget для привязки/отвязки. Должен содержать РОВНО ОДИН из полей.
keywordIdsstring[]requiredResponses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/keywords/detachcurl -X POST "https://app.brandfound.ai/api/v1/keywords/detach" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "target": { "productId": "0d7e6b3f-1a2c-4f5e-9876-abcdef012345" }, "keywordIds": [ "7b2f1d4e-8c9a-4e5b-b6c2-3d7a1f8e9c4b" ]}'{ "success": true, "data": { "target": { "companyId": "example_companyId", "productId": "example_productId", "competitorId": "example_competitorId" }, "detached": [ "example" ], "notAttached": [ "example" ] }}Successful response
Queries
Управление запросами к AI-ассистентам
Список запросов
/api/v1/queriesВозвращает список запросов к AI-ассистентам с количеством ответов. Поддерживает расширенную фильтрацию: по тональности, кластерам, регионам, избранному, области поиска и диапазонам метрик тональности. Состояние опроса читайте по queue.status и answersCount. Поле providers показывает нейросети, в которые запрос ушёл фактически. Детали по конкретным ранам — GET /api/v1/queries/queue.
Query parameters
offsetinteger= 0Смещение для пагинации
limitinteger= 20Количество записей на страницу
sortBystring= createdAtcreatedAttextupdatedAtsortOrderstring= descПорядок сортировки
ascdesccompanyIdstring (uuid)Фильтр по компании
productIdstring (uuid)Фильтр по продукту
typestringТип запроса (general, comparative, negative и т.д.). Поддерживает массив: ?type=comparative&type=neutral
originstringИсточник запроса. Поддерживает массив: ?origin=manual&origin=auto
manualautohasAnswersstringНаличие ответов
truefalselanguagestringЯзык запроса (ru, en и т.д.). Поддерживает массив: ?language=ru&language=en
searchTextstringПоиск по тексту запроса
providerstringФильтр по AI-провайдеру ответа
sourceIdstringФильтр по ID источника ответа. Поддерживает массив: ?sourceId=id1&sourceId=id2
labelSlugstringФильтр по slug кластера/лейбла
regionstringРегион запроса. Поддерживает массив: ?region=RU®ion=US
isFavoritestringТолько избранные запросы
truefalsesentimentstringФильтр по тональности упоминаний в ответах
positiveneutralnegativesearchFieldstring= queryОбласть поиска для searchText: в тексте запроса, в ответах или в источниках
queryanswersourceslabelFilterModestring= orЛогика фильтрации по кластерам: any (or) или all (and)
orandlabelstringSlug кластера. Поддерживает массив: ?label=slug1&label=slug2
createdAtFromstring (date-time)Начало диапазона даты создания (ISO 8601)
createdAtTostring (date-time)Конец диапазона даты создания (ISO 8601)
showArchivedstringПоказать архивированные запросы (по умолчанию: false)
truefalseResponses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/queriescurl -X GET "https://app.brandfound.ai/api/v1/queries" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": [ { "id": "query-001", "text": "Какой лучший смартфон 2026 года?", "type": "comparative", "origin": "manual", "language": "ru", "region": "russia", "createdAt": "2026-04-01T10:00:00.000Z", "company": { "id": "comp-uuid", "name": "Samsung" }, "product": { "id": "prod-001", "name": "Galaxy S25" }, "_count": { "answers": 4 } } ], "meta": { "total": 1, "limit": 20, "offset": 0, "hasMore": false }}Successful response
Создать запрос
/api/v1/queriesСоздаёт запрос и по умолчанию сразу ставит его в очередь опроса. Платно: каждый полученный ответ каждой нейросети списывает FoxCoin (цены в GET /api/v1/billing/balance). Запрос, опрошенный по 5 сетям, стоит 5 ответов. Передайте dispatch: false, чтобы создать запрос, не тратя FoxCoin. Нейросети выбираются полем providers (слаги — GET /api/v1/sources). Без него запрос уходит в те, что заданы по умолчанию для аккаунта (у аккаунта без настроек это ровно ChatGPT). Для массового создания с кластерами — POST /api/v1/queries/setup. Гео задаётся полями region (ISO 3166-1 alpha-2) и language; без region берётся страна компании. Поля geoOverride и resolvedGeoSnapshot — READ-ONLY снапшоты, их считает сервер для запросов кластера с гео-таргетами; в теле POST они не принимаются (тело строгое: неизвестное поле → 400). Результат постановки в очередь смотрите в поле dispatch ответа: dispatched=false с непустым error означает, что запрос создан, но опрос не стартовал.
Request body
textstringrequiredcompanyIdstringrequiredproductIdstringtypestring= neutralЛегаси-значения negative и general принимаются: negative → reputational, general → neutral.
neutralcommercialinformationalcomparativereputationalbrandedlanguagestring= ruISO 639-1 код языка ответа (ru, en, ar, hi, vi, ms, ...). Задаёт язык, на котором нейросеть обязана ответить: в промпт подставляется явное требование с названием языка из справочника. По умолчанию ru.
regionstringСтрана запроса, ISO 3166-1 alpha-2 (AE, SA, RU). Без поля берётся страна компании (primary regionTarget), затем RU. Legacy-названия («russia») принимаются и нормализуются. Гео-таргетинга выдачи не даёт — это разрез для фильтров и аналитики.
providersstring[]Нейросети для опроса. Без поля идут дефолты аккаунта (у аккаунта без настроек это ровно ChatGPT).
dispatchboolean= truefalse — создать запрос, НЕ ставя его в платный опрос.
labelsstring[]Имена кластеров: создаются или переиспользуются по slug.
Responses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED402application/jsonНедостаточно FoxCoin
HTTP_402404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/queriescurl -X POST "https://app.brandfound.ai/api/v1/queries" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "text": "лучшие сервисы threat intelligence для банков", "companyId": "e08cf948-88b4-4aac-949e-6c1cc3b4f427", "type": "comparative", "language": "en", "region": "AE", "providers": [ "chatgpt", "gemini", "perplexity" ]}'{ "success": true, "data": { "id": "8a5bd522-975a-4ba5-8974-04ac3785a69a", "text": "лучшие сервисы threat intelligence для банков", "type": "comparative", "origin": "manual", "language": "ru", "region": "RU", "companyId": "e08cf948-88b4-4aac-949e-6c1cc3b4f427", "productId": null, "providers": [ "chatgpt", "perplexity", "gemini" ], "createdAt": "2026-08-04T12:00:00.000Z", "dispatch": { "dispatched": true, "providers": [ "chatgpt", "perplexity", "gemini" ], "runStatus": "PENDING", "error": null } }}Successful response
Получить запрос
/api/v1/queries/{id}Возвращает запрос с ответами от AI-ассистентов и найденными упоминаниями.
Query parameters
idstring (uuid)requiredID запроса
includeAnswersstring= trueВключить ответы с упоминаниями (по умолчанию true)
truefalseResponses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND/api/v1/queries/{id}curl -X GET "https://app.brandfound.ai/api/v1/queries/{id}" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": { "id": "query-001", "text": "Какой лучший смартфон 2026 года?", "type": "comparative", "origin": "manual", "language": "ru", "region": "russia", "createdAt": "2026-04-01T10:00:00.000Z", "company": { "id": "comp-uuid", "name": "Samsung" }, "product": null, "answers": [ { "id": "ans-001", "content": "По мнению экспертов, Samsung Galaxy S25 Ultra и Apple iPhone 16 Pro...", "createdAt": "2026-04-01T10:01:00.000Z", "source": { "id": "src-001", "name": "ChatGPT", "type": "chatgpt" }, "mentions": [ { "id": "mention-001", "type": "company", "sentiment": 1, "position": 1, "context": "Samsung Galaxy S25 Ultra", "isOurs": true, "company": { "id": "comp-uuid", "name": "Samsung" }, "product": null, "keywords": [] } ] } ] }}Successful response
Архивировать запрос
/api/v1/queries/{id}Перемещает запрос в архив. Данные сохраняются и могут быть восстановлены.
Query parameters
idstring (uuid)requiredID запроса
Responses
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/queries/{id}curl -X DELETE "https://app.brandfound.ai/api/v1/queries/{id}" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"// No ContentSuccessfully deleted
Изменить запрос
/api/v1/queries/{id}Меняет текст, тип, язык, регион, продукт, избранность и кластеры запроса. Изменение текста НЕ переопрашивает нейросети — уже полученные ответы остаются привязаны к запросу. Чтобы опросить заново, создайте новый запрос. Тело строгое: неизвестное поле → 400.
Query parameters
idstring (uuid)requiredRequest body
textstringtypestringneutralcommercialinformationalcomparativereputationalbrandedlanguagestringregionstringISO 3166-1 alpha-2.
productIdstringnull — отвязать от продукта.
isFavoritebooleanlabelsstring[]ПОЛНЫЙ список кластеров: связки пересобираются.
Responses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/queries/{id}curl -X PATCH "https://app.brandfound.ai/api/v1/queries/{id}" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "region": "AE", "language": "en", "labels": [ "Threat Intelligence" ]}'{ "success": true, "data": { "id": "example_id", "text": "example_text", "type": "neutral", "origin": "manual", "language": "example_language", "region": "example_region", "companyId": "example_companyId", "productId": "example_productId", "createdAt": "2026-01-15T12:00:00Z", "updatedAt": "2026-01-15T12:00:00Z", "providers": [ "example" ], "answersCount": 1, "queue": { "pending": 1, "running": 1, "retrying": 1, "onHold": 1, "failed": 1, "cancelled": 1, "total": 1, "inQueue": 1, "status": "in_progress" } }}Successful response
Очередь опросов
/api/v1/queries/queueСостояние опроса запросов: по одному рану на каждую пару запрос-нейросеть. Позволяет отличить «ещё опрашивается» от «упало» и от «стоит без денег» — по одному лишь счётчику ответов это неразличимо.
Query parameters
statusstring= queued,onHold,failedГруппы статусов через запятую. По умолчанию все три.
companyIdstring (uuid)Сузить до одной компании. Без него — все компании аккаунта.
queryIdstring (uuid)Раны одного запроса
providerstringФильтр по нейросети
chatgptgeminiperplexitygrokdeepseekgigachatyandex_alicealice_chatgoogle_ai_modeincludeArchivedboolean= falseНе отсекать раны архивных запросов
limitinteger= 50Размер страницы
offsetinteger= 0Сдвиг
Responses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND/api/v1/queries/queuecurl -X GET "https://app.brandfound.ai/api/v1/queries/queue" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": [ { "id": "example_id", "queryId": "example_queryId", "queryText": "example_queryText", "companyId": "example_companyId", "provider": "chatgpt", "status": "PENDING", "attempts": 1, "maxAttempts": 1, "scheduledAt": "2026-01-15T12:00:00Z", "startedAt": "2026-01-15T12:00:00Z", "completedAt": "2026-01-15T12:00:00Z", "retryAfter": "2026-01-15T12:00:00Z", "answerId": "example_answerId", "error": "example_error" } ], "meta": { "total": 1, "limit": 1, "offset": 1, "hasMore": true }}Successful response
Сводка очереди и прогноз стоимости
/api/v1/queries/queue/summaryСчётчики ранов, стоимость текущей очереди и остаток FoxCoin одним запросом. Пока queuedTotal > 0 — опрос идёт. onHold > 0 означает нехватку средств: такие раны сами не возобновятся даже после пополнения.
Query parameters
companyIdstring (uuid)Сузить до одной компании
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND/api/v1/queries/queue/summarycurl -X GET "https://app.brandfound.ai/api/v1/queries/queue/summary" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": { "pending": 1, "running": 1, "retrying": 1, "onHold": 1, "failed": 1, "cancelled": 1, "queuedTotal": 1, "queuedQueries": 1, "estimatedCostFc": 1, "balanceFc": 1, "costPerAnswerFc": 1, "billingEnabled": true }}Successful response
Массовое создание запросов с выбором нейросетей
/api/v1/queries/setupСоздаёт кластеры и запросы одной транзакцией и сразу ставит их в очередь опроса. В отличие от POST /api/v1/queries принимает providers, поэтому это основная точка входа для интеграций, которым важно, в какие ассистенты уйдёт запрос. Платно: каждый полученный ответ каждой нейросети списывает FoxCoin (см. GET /api/v1/billing/balance). Лимит 500 запросов на вызов.
Request body
companyIdstringБез него берётся preferredCompanyId ключа (см. GET /api/v1/context)
clusterIdstringСуществующий кластер для гео-наследования; применяется ко всем элементам clusters без своего clusterId
providersstring[]Единственный способ выбрать нейросети явно: POST /api/v1/queries этого не умеет. Без этого поля запрос уходит в нейросети по умолчанию для аккаунта — а у аккаунта без настроек это ровно ChatGPT. Актуальный список: GET /api/v1/sources.
clustersobject[]requiredResponses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED402application/jsonНедостаточно FoxCoin
HTTP_402404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/queries/setupcurl -X POST "https://app.brandfound.ai/api/v1/queries/setup" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "companyId": "e08cf948-88b4-4aac-949e-6c1cc3b4f427", "providers": [ "chatgpt", "perplexity", "gemini" ], "clusters": [ { "name": "Threat Intelligence", "queries": [ { "text": "best threat intelligence vendors for banks in UAE. Answer in English.", "type": "comparative", "language": "en", "region": "AE" } ] } ]}'{ "success": true, "data": { "clustersCreated": 1, "queriesCreated": 1, "providerRunsCreated": 1, "dispatchError": "example_dispatchError", "clusters": [ { "id": "example_id", "name": "example_name", "slug": "example_slug", "queryIds": [ "example" ] } ] }}Successful response
Вернуть опросы в очередь
/api/v1/queries/queue/resumeВозобновляет раны, стоящие на паузе. **Зачем.** Когда на балансе не хватает FoxCoin, ран уходит в ON_HOLD_NO_FUNDS. Воркеры такие раны не забирают, и пополнение баланса их НЕ оживляет: очередь стоит, пока планировщик через 45 дней не переведёт раны в CANCELLED. Со стороны это выглядит как «оплатил, а запросы не идут». Возобновление всегда явное, этим методом. **Как в это попасть.** Создать запросы при недостаточном балансе. Гейт срабатывает дважды — при постановке в очередь и при исполнении, поэтому часть ранов может стоять на паузе, даже если запрос частично отработал. Проверять: `GET /api/v1/queries/queue/summary` → `onHold`, либо `queue.status` запроса = `on_hold_no_funds`. **402 — не отказ навсегда:** денег хватает не на всю пачку. Пополните баланс либо повторите с `force: true` — тогда раны, на которые средств хватит, отработают, а остальные снова встанут на паузу.
Request body
runIdsstring[]Точечно по id ранов
scopestringВсе раны на паузе
onHoldcompanyIdstringСузить scope до одной компании
forceboolean= falseВозобновить, даже если баланса не хватает на всю пачку
Responses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED402application/jsonНедостаточно FoxCoin на всю пачку
HTTP_402404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/queries/queue/resumecurl -X POST "https://app.brandfound.ai/api/v1/queries/queue/resume" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "scope": "onHold"}'{ "success": true, "data": { "resumed": 1 }}Successful response
Снять опросы с очереди
/api/v1/queries/queue/cancelОтменяет раны, которые ещё не ушли в работу: ждущие (PENDING, RETRYING) и стоящие на паузе. Раны в статусе RUNNING не трогаются никогда — они уже у воркера, отмена привела бы к гонке. **Когда нужно.** Остановить лишний массовый прогон до того, как он спишет FoxCoin: списание происходит по факту прихода ответа, поэтому отменённый ран не стоит ничего. Либо разобрать зависший хвост, который не планируется оплачивать. Отмена обратима: снятый ран возвращается в очередь через `POST /api/v1/queries/queue/resume` с его `runId`.
Request body
runIdsstring[]queryIdsstring[]Все отменяемые раны этих запросов
scopestringonHold — только паузы; queued — только активная очередь
onHoldqueuedcompanyIdstringСузить scope до одной компании
Responses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/queries/queue/cancelcurl -X POST "https://app.brandfound.ai/api/v1/queries/queue/cancel" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "scope": "queued", "companyId": "e08cf948-88b4-4aac-949e-6c1cc3b4f427"}'{ "success": true, "data": { "cancelled": 1 }}Successful response
Query autogeneration
Автоподбор семантики: генерация запросов в черновики и их подтверждение. Генерация (1 FoxCoin за запрос) и платный опрос нейросетей (10 FoxCoin за ответ) — разные шаги.
Автоподбор семантики (без опроса нейросетей)
/api/v1/queries/autogenerateСервис сам подбирает запросы и кладёт их в ЧЕРНОВИКИ. Нейросети при этом НЕ опрашиваются. Это замена флагу isAutoGenerationEnabled: тот запускал генерацию и платный опрос одним движением, разделить их было нельзя. Здесь шаги разведены — опрос стартует только на POST /api/v1/query-drafts/approve. Стоимость: 1 FoxCoin за КАЖДЫЙ сгенерированный запрос (списывается по факту доставленных черновиков). Опрос оплачивается отдельно: 10 FoxCoin за ответ (запрос × нейросеть). Язык и страна: без полей language/region берутся региональные настройки компании (regionTargets, PUT /api/v1/companies/{id}), затем ru/RU. Для замера по нескольким странам передайте targets — по задаче на страну, язык по умолчанию государственный (AE → ar, IN → hi). Типы: без поля types берутся Company.autogenQueryTypes — по умолчанию commercial, informational, comparative, reputational. Сравнительные запросы («X vs Y») появляются, только если comparative есть в списке И у компании заведены конкуренты. По умолчанию отвечает 202 сразу, генерация идёт в фоне: прогресс читается через GET этого же адреса по clientToken. Короткая форма (region/language/city/includeDistricts) и targets взаимоисключающи: вместе они дают 400, потому что снаружи targets задать город отдельной страны нечему.
Request body
companyIdstringБез поля — preferredCompanyId ключа.
productIdstringcountintegerrequiredСколько запросов сгенерировать НА КАЖДЫЙ таргет. 1 FoxCoin за запрос.
typesstring[]Типы генерируемых запросов; count делится между ними поровну. Без поля берутся Company.autogenQueryTypes (по умолчанию включают comparative).
clustersstring[]Темы, по которым раскладываются запросы.
userWishesstringnamestringИмя задачи — видно в UI и в GET.
languagestringISO 639-1. Без поля — язык компании. Только БЕЗ targets.
regionstringISO 3166-1 alpha-2. Без поля — primary-страна компании (regionTargets), затем RU. Legacy-названия («russia») принимаются. Только БЕЗ targets.
citystringТолько БЕЗ targets.
includeDistrictsbooleanТолько БЕЗ targets.
targetsobject[]Замер по нескольким странам: по задаче на страну. Стоимость — сумма count всех таргетов. ВЗАИМОИСКЛЮЧАЮЩЕ с короткой формой: region / language / city / includeDistricts рядом с targets → 400 (внутри targets у каждой страны свои город и язык).
waitboolean= falsetrue — дождаться конца генерации (только для небольших пачек: 100+ запросов идут минутами).
clientTokenstringСвой маркер задачи; по нему потом читается прогресс.
Responses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED402application/jsonНедостаточно FoxCoin: поля required и balance в теле ошибки
HTTP_402404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED503application/jsonАвтоподбор не сконфигурирован на сервере
HTTP_503/api/v1/queries/autogeneratecurl -X POST "https://app.brandfound.ai/api/v1/queries/autogenerate" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "companyId": "e08cf948-88b4-4aac-949e-6c1cc3b4f427", "count": 50, "types": [ "commercial", "informational", "comparative" ], "clusters": [ "Threat Intelligence", "Endpoint Protection" ], "targets": [ { "region": "AE" }, { "region": "IN" }, { "region": "RU", "language": "ru" } ]}'{ "success": true, "data": {}}Successful response
Статус задач автоподбора
/api/v1/queries/autogenerateПрогресс задач, запущенных POST /api/v1/queries/autogenerate. Опрашивайте до status = OK, затем читайте черновики через GET /api/v1/query-drafts. Черновики ещё идущей задачи (RUNNING) не подтверждаются намеренно — иначе подтвердится половина пачки.
Query parameters
runIdstring (uuid)Конкретная задача.
clientTokenstringЗадача по клиентскому маркеру из ответа POST.
limitinteger= 20Сколько последних задач вернуть.
Responses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/queries/autogeneratecurl -X GET "https://app.brandfound.ai/api/v1/queries/autogenerate" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": [ { "id": "example_id", "name": "example_name", "status": "PENDING", "requested": 1, "generated": 1, "companyId": "example_companyId", "productId": "example_productId", "clientToken": "example_clientToken", "language": "example_language", "region": "example_region", "city": "example_city", "types": [ "example" ], "clusters": [ "example" ], "createdAt": "2026-01-15T12:00:00Z", "completedAt": "2026-01-15T12:00:00Z", "error": "example_error" } ]}Successful response
Остановить задачу автоподбора
/api/v1/queries/autogenerate/cancelОтмена настоящая: не начатые пачки не выполняются, платите только за уже доставленные черновики. Ран переходит в CANCELLED, сгенерированные черновики остаются и их можно подтвердить.
Request body
runIdstringrequiredResponses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/queries/autogenerate/cancelcurl -X POST "https://app.brandfound.ai/api/v1/queries/autogenerate/cancel" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "runId": "8a5bd522-975a-4ba5-8974-04ac3785a69a"}'{ "success": true, "data": { "cancelled": true }}Successful response
Список черновиков запросов
/api/v1/query-draftsЧерновик ничего не стоит хранить и ничего не опрашивает: запросом он становится только через POST /api/v1/query-drafts/approve.
Query parameters
statusstringPENDING — ждут решения. По умолчанию все.
PENDINGAPPROVEDREJECTEDEXPIREDcompanyIdstring (uuid)Срез по компании.
typestringСрез по типу запроса.
neutralcommercialinformationalcomparativereputationalbrandedpageinteger= 1Страница, с 1.
limitinteger= 50Размер страницы.
Responses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/query-draftscurl -X GET "https://app.brandfound.ai/api/v1/query-drafts" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": { "drafts": [ { "id": "example_id", "text": "example_text", "type": "neutral", "language": "example_language", "region": "example_region", "labels": [ "example" ], "companyId": "example_companyId", "companyName": "example_companyName", "productId": "example_productId", "productName": "example_productName", "generationRunId": "example_generationRunId", "taskName": "example_taskName", "status": "PENDING", "createdAt": "2026-01-15T12:00:00Z" } ], "total": 1, "counts": {} }}Successful response
Подтвердить черновики и запустить опрос
/api/v1/query-drafts/approveПЛАТНЫЙ ШАГ: подтверждённые черновики становятся запросами и уходят в выбранные нейросети — 10 FoxCoin за каждый ответ (запрос × нейросеть). 50 черновиков × 3 сети = 150 ответов = 1500 FoxCoin. Сначала вызовите с dryRun: true и покажите смету пользователю. Идемпотентно: повторный вызов с теми же draftIds не создаёт запросы дважды и не переопрашивает их. Черновики ещё идущей задачи автогенерации пропускаются (skippedRunning) — дождитесь status = OK.
Request body
draftIdsstring[]requiredprovidersstring[]requiredНейросети для опроса. Каждая умножает стоимость.
dryRunbooleantrue — только смета, ничего не создаётся и не списывается.
Responses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED402application/jsonНедостаточно FoxCoin: поля required и balance в теле ошибки
HTTP_402404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/query-drafts/approvecurl -X POST "https://app.brandfound.ai/api/v1/query-drafts/approve" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "draftIds": [ "8a5bd522-975a-4ba5-8974-04ac3785a69a" ], "providers": [ "chatgpt", "gemini", "perplexity" ], "dryRun": true}'{ "success": true, "data": { "dryRun": true, "toApprove": 1, "estimatedAnswersCostFc": 1, "approved": 1, "createdQueries": 1, "skippedDuplicates": 1, "skippedRunning": 1, "dispatch": {}, "balance": 1 }}Successful response
Отклонить черновики
/api/v1/query-drafts/rejectМягкое отклонение: черновик остаётся в базе со статусом REJECTED (аудит биллинга). Ничего не опрашивается. Возврата FoxCoin за генерацию нет — запросы уже сгенерированы.
Request body
draftIdsstring[]requiredResponses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/query-drafts/rejectcurl -X POST "https://app.brandfound.ai/api/v1/query-drafts/reject" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "draftIds": [ "8a5bd522-975a-4ba5-8974-04ac3785a69a" ]}'{ "success": true, "data": { "rejected": 1 }}Successful response
AI answers
Ответы нейросетей пачкой: ссылки, упоминания, тональность.
Ответы нейросетей пачкой
/api/v1/answersЗамена циклу GET /api/v1/queries/{id} по каждому запросу: одна страница до 200 ответов со ссылками, упоминаниями и тональностью. Ссылки (links) — разобранные цитаты ЛЮБОЙ нейросети. Не путайте с сырым полем answer.sources: это payload скрейпера, он заполнен только у «Поиска с Алисой» и списком цитат не является. brandDomainCited — процитирован ли в ответе домен сайта компании. Поля упоминания: position — СМЕЩЕНИЕ СИМВОЛА в тексте ответа; массив отсортирован по нему, поэтому «каким по счёту назван бренд» — это РАНГ упоминания в массиве, а не значение position. sentiment (1 / 0 / -1) и sentimentScore (-1..1) берутся из тональности ВСЕГО ответа, поэтому у всех упоминаний одного ответа они одинаковы; sentimentScore = null, если тональность ещё не считалась. isOurs = false означает конкурента. Массивные параметры повторяются: ?companyId=a&companyId=b.
Query parameters
companyIdstring[]Компании (можно несколько).
productIdstring[]Продукты (можно несколько).
queryIdstring[]Только ответы этих запросов.
sourceIdstring[]Нейросети по id (GET /api/v1/sources).
providerstring[]Нейросети по слагу.
typestring[]Тип запроса, к которому относится ответ.
labelstring[]Слаги кластеров.
regionstring[]Регион запроса, ISO 3166-1 alpha-2. Legacy-названия тоже находятся.
languagestring[]Язык запроса.
createdAtFromstring (date-time)Дата создания ОТВЕТА, от (ISO 8601).
createdAtTostring (date-time)Дата создания ОТВЕТА, до (ISO 8601).
hasLinksbooleantrue — только ответы со ссылками, false — только без.
mentionsOursbooleantrue — только ответы, где упомянут бренд компании.
showArchivedboolean= falsetrue — включить ответы архивных запросов.
includestring= content,tonalityЧто добавить, через запятую: content, links, mentions, tonality.
limitinteger= 50Размер страницы.
offsetinteger= 0Смещение.
sortBystring= createdAtПоле сортировки.
createdAtdatesortOrderstring= descНаправление сортировки.
ascdescResponses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/answerscurl -X GET "https://app.brandfound.ai/api/v1/answers" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": [ { "id": "example_id", "createdAt": "2026-01-15T12:00:00Z", "date": "2026-01-15T12:00:00Z", "query": { "id": "example_id", "text": "example_text", "type": "example_type", "language": "example_language", "region": "example_region", "archived": true, "labels": [ {} ] }, "company": {}, "product": {}, "source": { "id": "example_id", "name": "example_name", "type": "example_type" }, "mentionsCount": 1, "ourMentionsCount": 1, "linksCount": 1, "brandDomainCited": true, "content": "example_content", "links": [ { "url": "example_url", "title": "example_title", "domain": "example_domain", "position": 1, "inAnswer": true, "inSources": true, "context": "example_context" } ], "mentions": [ { "id": "example_id", "isOurs": true, "type": "example_type", "position": 1, "sentiment": 1, "sentimentLabel": "example_sentimentLabel", "sentimentScore": 1, "context": "example_context", "isLink": true, "linkUrl": "example_linkUrl", "linkDomain": "example_linkDomain" } ] } ]}Successful response
Geo
Справочники стран, регионов, городов и языков.
Справочник стран
/api/v1/geo/countriesid из справочника нужны для regionTargets и defaultLanguageId компании и кластера, iso2 — для поля region запроса и автоподбора.
Query parameters
qstringПоиск по названию.
continentstringФильтр по континенту.
EUROPEASIANORTH_AMERICASOUTH_AMERICAAFRICAOCEANIAANTARCTICAlimitinteger= 250Максимум записей.
Responses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/geo/countriescurl -X GET "https://app.brandfound.ai/api/v1/geo/countries" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": { "data": [ { "id": "example_id", "iso2": "example_iso2", "iso3": "example_iso3", "nameRu": "example_nameRu", "nameEn": "example_nameEn", "flagEmoji": "example_flagEmoji", "defaultLanguage": "example_defaultLanguage", "defaultTimezone": "example_defaultTimezone", "continent": "example_continent" } ], "total": 1 }}Successful response
Справочник регионов страны
/api/v1/geo/regionsРегионы (области, штаты) конкретной страны. Обязателен один из countryId / countryIso2.
Query parameters
countryIso2stringДвухбуквенный код страны.
countryIdstring (uuid)UUID страны.
qstringПоиск по названию.
limitinteger= 100Максимум записей.
Responses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/geo/regionscurl -X GET "https://app.brandfound.ai/api/v1/geo/regions" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": {}}Successful response
Справочник городов страны
/api/v1/geo/citiesГорода конкретной страны. Обязателен один из countryId / countryIso2. cityId отсюда идёт в regionTargets компании и targets кластера.
Query parameters
countryIso2stringДвухбуквенный код страны.
countryIdstring (uuid)UUID страны.
regionIdstring (uuid)UUID региона.
qstringПоиск по названию.
limitinteger= 50Максимум записей.
Responses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/geo/citiescurl -X GET "https://app.brandfound.ai/api/v1/geo/cities" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": {}}Successful response
Справочник языков
/api/v1/geo/languagesid из справочника нужны для regionTargets и defaultLanguageId компании и кластера, iso2 — для поля region запроса и автоподбора.
Query parameters
qstringПоиск по названию или коду.
limitinteger= 200Максимум записей.
Responses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/geo/languagescurl -X GET "https://app.brandfound.ai/api/v1/geo/languages" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": { "data": [ { "id": "example_id", "iso639_1": "example_iso639_1", "nameNative": "example_nameNative", "nameEn": "example_nameEn" } ], "total": 1 }}Successful response
Query Labels
Метки/кластеры запросов: список (с опциональным срезом по компании), создание с регионализацией
Список кластеров (меток запросов)
/api/v1/query-labelsВозвращает метки/кластеры запросов текущего workspace с количеством запросов в каждом. Параметр companyId делает срез по компании: возвращаются только кластеры, в которых есть запросы этой компании, а queryCount считается по запросам этой компании. lite=true — облегчённый ответ { items: [{ id, name, slug, queryCount }] } без статистики и sampleQueries.
Query parameters
companyIdstring (uuid)Срез по компании: только кластеры с запросами этой компании; queryCount — по её запросам.
litestringlite=true — облегчённый ответ { items: [{ id, name, slug, queryCount }] } без статистики.
truefalseoffsetinteger= 0Смещение для пагинации
limitinteger= 20Количество записей на страницу
qstringCase-insensitive подстрока по имени метки.
sortstring= queryCount:descСортировка в формате field:direction.
queryCount:descqueryCount:ascname:ascname:desccreatedAt:desccreatedAt:asclastUsedAt:desclastUsedAt:aschasQueriesstringwith — только кластеры с запросами, without — пустые.
withwithoutminCountintegerМинимальное число запросов в кластере.
maxCountintegerМаксимальное число запросов в кластере.
createdFromstring (date-time)Метки, созданные не раньше указанной даты.
createdTostring (date-time)Метки, созданные не позже указанной даты.
lastUsedFromstring (date-time)Метки с lastUsedAt не раньше указанной даты.
lastUsedTostring (date-time)Метки с lastUsedAt не позже указанной даты.
includestringinclude=targets — догрузить геотаргеты кластера (country/city).
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/query-labelscurl -X GET "https://app.brandfound.ai/api/v1/query-labels" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": { "items": [ { "id": "example_id", "name": "example_name", "slug": "example_slug", "createdAt": "2026-01-15T12:00:00Z", "lastUsedAt": "2026-01-15T12:00:00Z", "queryCount": 1, "lastQueryAt": "2026-01-15T12:00:00Z" } ], "totalCount": 1, "pageInfo": { "limit": 1, "offset": 1, "hasMore": true }, "stats": {}, "filters": {} }}Successful response
Создать (или обновить) кластер с регионализацией
/api/v1/query-labelsFind-or-create по (slug, userId). Если кластер с таким slug существует — обновляется (имя, гео-настройки), targets пересоздаются. Опциональные companyId/productId принимаются, но на QueryLabel пока не персистятся.
Request body
namestringrequiredslugstringdescriptionstringcompanyIdstringproductIdstringdefaultLanguageIdstringdefaultLocalestringdefaultResponseLanguageIdstringgeoScopestringGLOBALCOUNTRYREGIONCITYinjectLocationModestringNONEAPPEND_PARENSAPPEND_NATURALPREPENDAI_REWRITEautogenStrategystringSHAREDPER_TARGETPER_TARGET_LOCALIZEDtargetsobject[]Responses
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED409application/jsonРесурс с таким именем уже существует
CONFLICT429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/query-labelscurl -X POST "https://app.brandfound.ai/api/v1/query-labels" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Example", "slug": "", "description": "", "companyId": "", "productId": "", "defaultLanguageId": "", "defaultLocale": "", "defaultResponseLanguageId": "", "geoScope": "GLOBAL", "injectLocationMode": "NONE", "autogenStrategy": "SHARED", "targets": null}'{ "success": false, "error": { "code": "VALIDATION_ERROR", "message": "Ошибка валидации" }}Ошибка валидации
Mentions
Просмотр упоминаний бренда
Список упоминаний
/api/v1/mentionsВозвращает упоминания бренда в ответах AI-ассистентов с полным контекстом.
Query parameters
offsetinteger= 0Смещение для пагинации
limitinteger= 20Количество записей на страницу
sortBystring= createdAtcreatedAtpositionsentimentsortOrderstring= descПорядок сортировки
ascdesctimeRangestringВременной диапазон
24h7d30d90dallcreatedAtFromstring (date-time)Начало диапазона даты создания (ISO 8601)
createdAtTostring (date-time)Конец диапазона даты создания (ISO 8601)
companyIdstring (uuid)Фильтр по компании
productIdstring (uuid)Фильтр по продукту
competitorIdstring (uuid)Фильтр по конкуренту
answerIdstring (uuid)Фильтр по конкретному ответу
typestringТип упоминания
companyproductkeywordcompetitorsentimentstringТональность
positiveneutralnegativesearchstringПоисковый запрос (case-insensitive)
isOursstringТолько наши (true) или только конкурентов (false)
truefalseResponses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/mentionscurl -X GET "https://app.brandfound.ai/api/v1/mentions" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": [ { "id": "mention-001", "type": "company", "sentiment": 1, "position": 1, "context": "Samsung Galaxy S25 Ultra является одним из лучших смартфонов...", "isOurs": true, "createdAt": "2026-04-01T10:01:00.000Z", "answer": { "id": "ans-001", "content": "По мнению экспертов...", "createdAt": "2026-04-01T10:01:00.000Z", "source": { "id": "src-001", "name": "ChatGPT", "type": "chatgpt" }, "query": { "id": "query-001", "text": "Какой лучший смартфон?", "type": "comparative" } }, "company": { "id": "comp-uuid", "name": "Samsung" }, "product": null, "competitor": null, "keywords": [] } ], "meta": { "total": 1, "limit": 20, "offset": 0, "hasMore": false }}Successful response
Analytics
Аналитика: конкуренты, тональность, ссылки, видимость бренда
Аналитика конкурентов
/api/v1/analytics/competitorsПолный сравнительный анализ вашей компании и конкурентов по упоминаниям в AI-ассистентах. Поддерживает фильтрацию по кластерам (slug), AI-провайдерам и периоду.
Query parameters
timeRangestring= 30dВременной диапазон
24h7d30dallfromstring (date-time)Начало кастомного диапазона (ISO 8601)
tostring (date-time)Конец кастомного диапазона (ISO 8601)
companyIdstring (uuid)ID компании
productIdstring (uuid)ID продукта
sourceIdstring[]ID AI-провайдеров
labelIdstring[]ID кластеров/лейблов
labelSlugstringSlug кластера. Массив: ?labelSlug=slug1&labelSlug=slug2
labelFilterModestring= orРежим фильтрации по лейблам
orandincludeDemostringВключить демо-данные
truefalseResponses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/analytics/competitorscurl -X GET "https://app.brandfound.ai/api/v1/analytics/competitors" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": { "ourCompany": { "name": "Samsung", "mentions": 150, "mentionsBrand": 120, "mentionsLink": 30, "sentiment": 0.72, "brandMentionRate": 0.8 }, "competitors": [ { "name": "Apple", "mentions": 180, "mentionsBrand": 160, "mentionsLink": 20, "sentiment": 0.65, "categories": [], "brandMentionRate": 0.89 } ], "overall": { "ourMentions": 150, "competitorMentions": 180, "leader": "Apple" }, "productBreakdown": [], "sourceBreakdown": [ { "name": "ChatGPT", "ourAnswers": 50, "ourMentions": 80, "competitorBreakdown": [], "totalAnswers": 120 } ], "shareOfVoice": { "ourCompany": 0.45, "competitors": [ { "name": "Apple", "share": 0.55 } ], "totalAnswers": 200 }, "exclusiveBreakdown": { "onlyUs": 60, "shared": 40, "onlyCompetitors": 50, "total": 150, "byCompetitor": [] }, "timeline": [ { "date": "2026-04-01", "ourMentions": 10, "competitorMentions": 12, "totalAnswers": 30 } ] }}Successful response
Предпросмотр упоминаний конкурентов
/api/v1/analytics/competitors/previewВозвращает конкретные ответы AI-ассистентов с упоминаниями для детального анализа. Поддерживает фильтрацию по кластерам, демо-данные, кастомный период и режим фильтрации лейблов. companyId обязателен: без него ответ склеил бы все компании аккаунта в одни цифры. Если не передан — подставляется preferredCompanyId ключа (см. GET /api/v1/context).
Query parameters
sidestringrequiredЧья сторона: наша компания или конкурент
ourcompetitorcompetitorNamestringИмя конкурента (если side=competitor)
mentionTypestring= bothТип упоминания
brandlinkbothoffsetinteger= 0Смещение для пагинации
limitinteger= 20Количество записей на страницу
timeRangestring24h7d30dallcompanyIdstring (uuid)productIdstring (uuid)sourceIdstring[]labelIdstring[]includeMentionsstringВключить упоминания в ответ
truefalseincludeDemostringВключить демо-данные
truefalselabelFilterModestring= orЛогика фильтрации по кластерам
orandfromstring (date-time)Начало периода (ISO 8601)
tostring (date-time)Конец периода (ISO 8601)
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/analytics/competitors/previewcurl -X GET "https://app.brandfound.ai/api/v1/analytics/competitors/preview" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": { "items": [ { "id": "mention-001", "isOurs": true, "type": "company", "sentiment": 1, "position": 1, "context": "Samsung Galaxy S25 Ultra", "company": { "id": "c1", "name": "Samsung" }, "product": null, "competitor": null, "answer": { "id": "ans-001", "content": "По мнению экспертов...", "source": { "name": "ChatGPT", "type": "chatgpt" } } } ], "total": 1, "offset": 0, "limit": 20, "hasMore": false }}Successful response
Аналитика тональности
/api/v1/analytics/tonalityПолный анализ тональности ответов AI-ассистентов: метрики качества, timeline, проблемные и лучшие ответы.
Query parameters
timeRangestring= 30d24h7d30d90dcompanyIdstring (uuid)productIdstring (uuid)queryTypestringТип запроса
neutralcomparativenegativesentimentstringФильтр по тональности
positiveneutralnegativesourceIdstring[]AI-провайдеры
labelSlugstring[]Кластеры/лейблы по slug
labelFilterModestring= ororandfromstring (date-time)tostring (date-time)includeDemostringtruefalseResponses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/analytics/tonalitycurl -X GET "https://app.brandfound.ai/api/v1/analytics/tonality" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": { "summary": { "totalAnswers": 200, "avgOverallScore": 7.5, "sentimentDistribution": { "positive": 120, "neutral": 50, "negative": 30 } }, "metrics": { "relevanceToBrand": 8.2, "factualityConfidence": 7.8, "helpfulness": 7.5, "preferenceForBrand": 6.9, "recommendationStrength": 7.1, "fairness": 8, "evidenceSupport": 7.3, "informativeness": 7.6, "completeness": 7.4, "impactOnBrand": 7 }, "timeline": [ { "date": "2026-04-01", "positive": 10, "neutral": 5, "negative": 2, "avgScore": 7.8, "count": 17 } ], "topSources": [ { "sourceName": "ChatGPT", "count": 80, "avgScore": 7.9 } ], "queryTypes": [ { "type": "neutral", "count": 100, "avgScore": 7.8, "positive": 70, "neutral": 20, "negative": 10 } ], "problematicAnswers": [], "bestAnswers": [], "brandAnalytics": { "monthlyTrend": [], "correlations": [], "insights": [] } }}Successful response
Аналитика ссылок
/api/v1/analytics/linksАналитика ссылок из ответов AI-ассистентов: топ-домены, цитирование по провайдерам, timeline. Поддерживает фильтрацию по тональности, кластерам, типу запроса, порогам Impact/Overall Score и кастомный период. companyId обязателен: без него ответ склеил бы все компании аккаунта в одни цифры. Если не передан — подставляется preferredCompanyId ключа (см. GET /api/v1/context).
Query parameters
timeRangestring24h7d30dallcompanyIdstring (uuid)productIdstring (uuid)includeDemostringtruefalselabelSlugstring[]sortDomainsBystringСортировка доменов
sentimentstringФильтр по тональности
positiveneutralnegativeminImpactnumberМинимальный порог Impact Score
minOverallnumberМинимальный порог Overall Score
presetstringПресет фильтрации
queryTypestringТип запроса
neutralnegativecomparativelabelstringSlug кластера
labelFilterModestring= orЛогика фильтрации
orandfromstring (date-time)Начало периода
tostring (date-time)Конец периода
chartOnlystringТолько данные для графика
truefalsecitationModestringРежим цитирования
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/analytics/linkscurl -X GET "https://app.brandfound.ai/api/v1/analytics/links" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": { "topDomains": [ { "domain": "samsung.com", "name": "Samsung", "trustRank": 95, "linkCount": 45, "mentionCount": 120, "sentiment": 0.8 } ], "citationsByProvider": [ { "provider": "chatgpt", "entityName": "Samsung", "isOurs": true, "citations": 30 } ], "timeline": [ { "date": "2026-04-01", "linkCount": 15 } ] }}Successful response
Топ домены
/api/v1/analytics/links/top-domainsВозвращает наиболее цитируемые домены в ответах AI-ассистентов. Поддерживает фильтрацию по тональности, типу запроса, порогам Impact/Overall Score и демо-данные. companyId обязателен: без него ответ склеил бы все компании аккаунта в одни цифры. Если не передан — подставляется preferredCompanyId ключа (см. GET /api/v1/context).
Query parameters
timeRangestring24h7d30dallcompanyIdstring (uuid)productIdstring (uuid)limitinteger= 10Количество доменов
includeDemostringВключить демо-данные
truefalsesentimentstringФильтр по тональности
positiveneutralnegativeminImpactnumberМинимальный порог Impact Score
minOverallnumberМинимальный порог Overall Score
queryTypestringТип запроса
neutralnegativecomparativeResponses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/analytics/links/top-domainscurl -X GET "https://app.brandfound.ai/api/v1/analytics/links/top-domains" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": [ { "domain": "samsung.com", "name": "Samsung", "trustRank": 95, "linkCount": 45, "mentionCount": 120, "sentiment": 0.8 }, { "domain": "apple.com", "name": "Apple", "trustRank": 97, "linkCount": 52, "mentionCount": 140, "sentiment": 0.75 } ]}Successful response
Видимость бренда
/api/v1/analytics/brand-visibilityTimeline видимости бренда в сравнении с конкурентами с настраиваемой гранулярностью. Поддерживает фильтрацию по кластерам (ID и slug), AI-провайдерам и режим логики фильтрации.
Query parameters
granularitystring= dayГранулярность временной оси
dayweekmonthtimeRangestring24h7d30dallcompanyIdstring (uuid)productIdstring (uuid)includeDemostringtruefalsefromstring (date-time)tostring (date-time)labelIdstringID кластера. Массив: ?labelId=id1&labelId=id2
labelSlugstringSlug кластера
labelFilterModestring= orЛогика фильтрации
orandsourceIdstringID AI-источника
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/analytics/brand-visibilitycurl -X GET "https://app.brandfound.ai/api/v1/analytics/brand-visibility" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": { "timeline": [ { "period": "2026-04-01", "periodLabel": "1 апр", "our": 15, "competitors": { "Apple": 18, "Google": 12 } } ], "summary": { "trend": "growing" } }}Successful response
Динамика цитируемости
/api/v1/analytics/links/citation-timelineДоля ответов, где нас цитируют, против конкурентов, по дням. Считается по дневным роллапам, поэтому поддерживается только режим «цитирование в целом»: роллап не различает цитирование по URL и по домену.
Query parameters
companyIdstring (uuid)Компания. Без него подставляется preferredCompanyId ключа
productIdstringПродукт
timeRangestring24h | 7d | 30d | 90d | all
granularitystringРазрез динамики
tzstringЧасовой пояс
sourceIdstring[]Источники
labelSlugstring[]Кластеры
labelFilterModestringAND | OR
includeDemobooleanВключить демо-данные
Responses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND/api/v1/analytics/links/citation-timelinecurl -X GET "https://app.brandfound.ai/api/v1/analytics/links/citation-timeline" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true}Successful response
Компании и продукты для фильтров
/api/v1/analytics/companies-productsКомпании аккаунта вместе с их продуктами — источник для селектора «компания → продукт». companyId здесь НЕ обязателен: без него возвращаются все компании, и это ровно то, зачем метод нужен.
Query parameters
companyIdstring (uuid)Сузить до одной компании
includeDemobooleanВключить демо-данные
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/analytics/companies-productscurl -X GET "https://app.brandfound.ai/api/v1/analytics/companies-products" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true}Successful response
Links
Домены и ссылки из AI-ответов
Домены и ссылки
/api/v1/linksДвухуровневая таблица доменов и ссылок из ответов AI-ассистентов с сортировкой и фильтрацией. companyId обязателен: без него ответ склеил бы все компании аккаунта в одни цифры. Если не передан — подставляется preferredCompanyId ключа (см. GET /api/v1/context).
Query parameters
pageinteger= 1Номер страницы
pageSizeinteger= 50Размер страницы
sortBystring= lastMentionedlastMentionedmentionCountanswerCountourMentionCountcompetitorMentionCountdomaintrustRankdomainLinkssortDirstring= descascdescsearchstringПоисковый запрос (case-insensitive)
searchFieldstringПоле для поиска
domainurltitletimeRangestring24h7d30dfromstring (date-time)tostring (date-time)companyIdstring (uuid)productIdstring (uuid)sentimentstringpositiveneutralnegativequeryTypestringneutralnegativecomparativeproviderstring[]AI-провайдеры
activestringТолько активные ссылки
truefalsedomainsOnlystringТолько домены (без подссылок)
truefalsedomainstringПодссылки конкретного домена
labelstring[]Кластеры/лейблы
includeDemostringtruefalseResponses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/linkscurl -X GET "https://app.brandfound.ai/api/v1/links" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": { "page": 1, "pageSize": 50, "totalCount": 120, "hasMore": true, "rows": [ { "domain": "samsung.com", "trustRank": 95, "mentionCount": 45, "answerCount": 30, "ourMentionCount": 40, "competitorMentionCount": 5, "lastMentioned": "2026-04-05T12:00:00.000Z", "domainLinks": 8 } ] }}Successful response
Опции фильтров ссылок
/api/v1/links/filter-optionsВозвращает доступные значения для фильтров таблицы ссылок: провайдеры и лейблы. companyId обязателен: без него ответ склеил бы все компании аккаунта в одни цифры. Если не передан — подставляется preferredCompanyId ключа (см. GET /api/v1/context).
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/links/filter-optionscurl -X GET "https://app.brandfound.ai/api/v1/links/filter-options" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": { "providers": [ { "value": "chatgpt", "label": "ChatGPT" }, { "value": "gemini", "label": "Gemini" }, { "value": "claude", "label": "Claude" }, { "value": "perplexity", "label": "Perplexity" } ], "labels": [ { "value": "brand-queries", "label": "Брендовые запросы" } ] }}Successful response
Advertising
Рекламные данные из AI-ответов
Рекламные данные
/api/v1/advertisingАналитика рекламных и промо-блоков в ответах AI-ассистентов. Поддерживает пагинацию, поиск по домену/URL, фильтрацию по кластерам, типу промо, периоду и сортировку. companyId обязателен: без него ответ склеил бы все компании аккаунта в одни цифры. Если не передан — подставляется preferredCompanyId ключа (см. GET /api/v1/context).
Query parameters
timeRangestring24h7d30dallcompanyIdstring (uuid)productIdstring (uuid)includeDemostringtruefalsepageinteger= 1Номер страницы
pageSizeinteger= 50Размер страницы
searchstringПоиск по домену или URL
searchFieldstringПоле поиска
domainurltitlelabelstringSlug кластера. Массив: ?label=slug1&label=slug2
promoTypestringТип промо-блока
sortBystringПоле сортировки
sortDirstringНаправление сортировки
ascdescfromstring (date-time)Начало периода (ISO 8601)
tostring (date-time)Конец периода (ISO 8601)
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/advertisingcurl -X GET "https://app.brandfound.ai/api/v1/advertising" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": { "summary": { "promoCount": 25, "ourPromos": 8, "competitorPromos": 17, "uniqueDomains": 12 }, "topDomains": [ { "domain": "samsung.com", "count": 5, "isOurs": true }, { "domain": "apple.com", "count": 8, "isOurs": false } ], "timeseries": [ { "date": "2026-04-01", "count": 3 } ] }}Successful response
Предпросмотр рекламных блоков
/api/v1/advertising/previewДетализация к сводке /api/v1/advertising: какие промо показывались и в каких ответах.
Query parameters
domainstringrequiredДомен промо. ОБЯЗАТЕЛЕН, иначе 400
companyIdstring (uuid)Компания. Без него подставляется preferredCompanyId ключа
productIdstringПродукт
promoTypestringours | competitor | other
ourscompetitorothertimeRangestring24h | 7d | 30d | 90d | all
labelstring[]Кластеры
labelFilterModestringAND | OR
limitinteger= 201..50
offsetinteger= 0Сдвиг
includeDemobooleanВключить демо-данные
Responses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND/api/v1/advertising/previewcurl -X GET "https://app.brandfound.ai/api/v1/advertising/preview" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true}Successful response
Content Factory
Контент-фабрика: задачи, теги, обогащение, генерация планов и статей, детекция инсайтов
Список задач
/api/v1/factory/tasksВозвращает список задач контент-фабрики с фильтрацией, пагинацией и сортировкой.
Query parameters
companyIdstring (uuid)Фильтр по компании
statusstring[]Фильтр по статусу (можно несколько: ?status=TODO&status=IN_PROGRESS)
typestring[]Фильтр по типу задачи (можно несколько)
prioritystring[]Фильтр по приоритету (можно несколько)
searchstringПоиск по названию и описанию задачи
tagIdstring (uuid)Фильтр по тегу
aiGeneratedbooleanФильтр: только AI-сгенерированные задачи
sortBystring= createdAtcreatedAtupdatedAtprioritystatuspositionsortOrderstring= descПорядок сортировки
ascdescoffsetinteger= 0Смещение для пагинации
limitinteger= 20Количество записей на страницу
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/factory/taskscurl -X GET "https://app.brandfound.ai/api/v1/factory/tasks" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": [ { "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "title": "Написать FAQ по Galaxy S25", "status": "TODO", "type": "CREATE_FAQ", "priority": "HIGH", "position": 1, "aiGenerated": true, "aiReasoning": "Обнаружен content gap по FAQ-запросам", "aiConfidence": 0.87, "description": "Создать FAQ на основе частых вопросов пользователей", "targetKeywords": [ "galaxy s25 faq", "samsung s25 характеристики" ], "targetProviders": [ "chatgpt", "gemini" ], "companyId": "clx1abc2d0001abcdef123456", "companyName": "Samsung", "companyFavicon": "https://samsung.com/favicon.ico", "dueDate": "2026-04-20T00:00:00.000Z", "tags": [ { "id": "tag-001", "name": "FAQ", "color": "#6366f1", "icon": null, "isSystem": false, "position": 0 } ], "metadata": {}, "createdAt": "2026-04-07T12:00:00.000Z", "updatedAt": "2026-04-07T12:00:00.000Z" } ], "meta": { "total": 1, "limit": 20, "offset": 0, "hasMore": false }}Successful response
Создать задачу
/api/v1/factory/tasksСоздаёт новую задачу контент-фабрики.
Request body
titlestringrequiredНазвание задачи
companyIdstringrequiredID компании
typestringrequiredТип задачи
NEW_ARTICLEOPTIMIZE_PAGECREATE_FAQCOMPARISONGUIDECASE_STUDYprioritystring= MEDIUMПриоритет
CRITICALHIGHMEDIUMLOWdescriptionstringОписание задачи
targetKeywordsstring[]Целевые ключевые слова (макс. 20)
targetProvidersstring[]Целевые AI-провайдеры
Responses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/factory/taskscurl -X POST "https://app.brandfound.ai/api/v1/factory/tasks" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "title": "Написать FAQ по Galaxy S25", "companyId": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "type": "CREATE_FAQ", "priority": "HIGH", "description": "Создать FAQ на основе частых вопросов пользователей", "targetKeywords": [ "galaxy s25 faq", "samsung s25 характеристики" ], "targetProviders": [ "chatgpt", "gemini" ]}'{ "success": true, "data": { "id": "example_id", "title": "example_title", "status": "IDEA", "type": "NEW_ARTICLE", "priority": "CRITICAL", "position": 1, "aiGenerated": true, "aiReasoning": "example_aiReasoning", "aiConfidence": 1, "description": "example_description", "targetKeywords": [ "example" ], "targetProviders": [ "example" ], "companyId": "example_companyId", "companyName": "example_companyName", "companyFavicon": "example_companyFavicon", "dueDate": "2026-01-15T12:00:00Z", "tags": [ { "id": "example_id", "name": "example_name", "color": "example_color", "icon": "example_icon", "isSystem": true, "position": 1, "taskCount": 1 } ], "metadata": {}, "createdAt": "2026-01-15T12:00:00Z", "updatedAt": "2026-01-15T12:00:00Z" }}Successful response
Получить задачу
/api/v1/factory/tasks/{id}Возвращает полную информацию о задаче контент-фабрики.
Query parameters
idstring (uuid)requiredID задачи
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND/api/v1/factory/tasks/{id}curl -X GET "https://app.brandfound.ai/api/v1/factory/tasks/{id}" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": { "id": "example_id", "title": "example_title", "status": "IDEA", "type": "NEW_ARTICLE", "priority": "CRITICAL", "position": 1, "aiGenerated": true, "aiReasoning": "example_aiReasoning", "aiConfidence": 1, "description": "example_description", "targetKeywords": [ "example" ], "targetProviders": [ "example" ], "companyId": "example_companyId", "companyName": "example_companyName", "companyFavicon": "example_companyFavicon", "dueDate": "2026-01-15T12:00:00Z", "tags": [ { "id": "example_id", "name": "example_name", "color": "example_color", "icon": "example_icon", "isSystem": true, "position": 1, "taskCount": 1 } ], "metadata": {}, "createdAt": "2026-01-15T12:00:00Z", "updatedAt": "2026-01-15T12:00:00Z" }}Successful response
Обновить задачу
/api/v1/factory/tasks/{id}Частичное обновление задачи контент-фабрики.
Query parameters
idstring (uuid)requiredID задачи
Request body
statusstringIDEABACKLOGTODOIN_PROGRESSREVIEWDONEDISMISSEDprioritystringCRITICALHIGHMEDIUMLOWtitlestringdescriptionstringtagIdsstring[]Массив ID тегов для привязки
targetKeywordsstring[]targetProvidersstring[]dueDatestringДедлайн задачи
metadataobjectПроизвольные метаданные задачи
Responses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/factory/tasks/{id}curl -X PATCH "https://app.brandfound.ai/api/v1/factory/tasks/{id}" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "status": "IN_PROGRESS", "priority": "HIGH", "tagIds": [ "tag-001", "tag-002" ]}'{ "success": true, "data": { "id": "example_id", "title": "example_title", "status": "IDEA", "type": "NEW_ARTICLE", "priority": "CRITICAL", "position": 1, "aiGenerated": true, "aiReasoning": "example_aiReasoning", "aiConfidence": 1, "description": "example_description", "targetKeywords": [ "example" ], "targetProviders": [ "example" ], "companyId": "example_companyId", "companyName": "example_companyName", "companyFavicon": "example_companyFavicon", "dueDate": "2026-01-15T12:00:00Z", "tags": [ { "id": "example_id", "name": "example_name", "color": "example_color", "icon": "example_icon", "isSystem": true, "position": 1, "taskCount": 1 } ], "metadata": {}, "createdAt": "2026-01-15T12:00:00Z", "updatedAt": "2026-01-15T12:00:00Z" }}Successful response
Архивировать задачу
/api/v1/factory/tasks/{id}Архивирование задачи. Данные сохраняются, но задача переходит в статус DISMISSED.
Query parameters
idstring (uuid)requiredID задачи
Responses
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/factory/tasks/{id}curl -X DELETE "https://app.brandfound.ai/api/v1/factory/tasks/{id}" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"// No ContentSuccessfully deleted
Обогатить задачу
/api/v1/factory/tasks/{id}/enrichRAG-поиск по базе источников, анализ конкурентов, AI-рекомендации.
Query parameters
idstring (uuid)requiredID задачи
Request body
topicstringrequiredТема для обогащения
descriptionstringДополнительное описание
keywordsstring[]Ключевые слова для RAG-поиска
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/factory/tasks/{id}/enrichcurl -X POST "https://app.brandfound.ai/api/v1/factory/tasks/{id}/enrich" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "topic": "Samsung Galaxy S25 FAQ", "description": "Часто задаваемые вопросы о Galaxy S25", "keywords": [ "galaxy s25", "samsung", "характеристики" ]}'{ "success": true, "data": {}}Successful response
Сгенерировать план
/api/v1/factory/tasks/{id}/planГенерация плана статьи на основе обогащённых данных: структура, заголовки, ключевые тезисы, tone of voice.
Query parameters
idstring (uuid)requiredID задачи
Request body
promptstringДополнительные инструкции для генерации плана
topicIdstringID выбранной темы (из suggest topics)
topicTitlestringНазвание темы
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/factory/tasks/{id}/plancurl -X POST "https://app.brandfound.ai/api/v1/factory/tasks/{id}/plan" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "prompt": "Сфокусируйся на сравнении с iPhone 16", "topicId": "topic-001", "topicTitle": "Samsung Galaxy S25 vs iPhone 16: полное сравнение"}'{ "success": true, "data": { "plan": {}, "usage": { "inputTokens": 1, "outputTokens": 1 } }}Successful response
Сгенерировать статью
/api/v1/factory/tasks/{id}/articleГенерация статьи по плану (SSE-стриминг). Content-Type: text/event-stream.
Query parameters
idstring (uuid)requiredID задачи
Request body
planIdstringID плана для генерации статьи
articleLengthstring= mediumДлина статьи: short (~1000 слов), medium (~2000), long (~3500)
shortmediumlongResponses
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/factory/tasks/{id}/articlecurl -X POST "https://app.brandfound.ai/api/v1/factory/tasks/{id}/article" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "planId": "plan-001", "articleLength": "medium"}'{ "success": false, "error": { "code": "UNAUTHORIZED", "message": "Необходима авторизация" }}Необходима авторизация
Версии контента
/api/v1/factory/tasks/{id}/versionsВозвращает список версий контента (планов, статей, брифов) для задачи.
Query parameters
idstring (uuid)requiredID задачи
typestringФильтр по типу контента
planarticlebriefplanIdstringФильтр по ID плана
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND/api/v1/factory/tasks/{id}/versionscurl -X GET "https://app.brandfound.ai/api/v1/factory/tasks/{id}/versions" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": [ { "id": "example_id", "type": "plan", "version": 1, "content": {}, "createdAt": "2026-01-15T12:00:00Z" } ]}Successful response
Аналитика задачи
/api/v1/factory/tasks/{id}/analyticsВозвращает аналитику по задаче: статистика обогащения, генераций, публикаций.
Query parameters
idstring (uuid)requiredID задачи
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND/api/v1/factory/tasks/{id}/analyticscurl -X GET "https://app.brandfound.ai/api/v1/factory/tasks/{id}/analytics" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": {}}Successful response
Предложить темы
/api/v1/factory/tasks/{id}/topicsГенерация 10 тем на основе данных задачи.
Query parameters
idstring (uuid)requiredID задачи
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/factory/tasks/{id}/topicscurl -X POST "https://app.brandfound.ai/api/v1/factory/tasks/{id}/topics" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": [ { "id": "example_id", "title": "example_title", "description": "example_description", "keywords": [ "example" ], "score": 1 } ]}Successful response
Список тегов
/api/v1/factory/tagsВозвращает все теги контент-фабрики с количеством задач.
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/factory/tagscurl -X GET "https://app.brandfound.ai/api/v1/factory/tags" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": [ { "id": "tag-001", "name": "FAQ", "color": "#6366f1", "icon": null, "isSystem": false, "position": 0, "taskCount": 5 }, { "id": "tag-002", "name": "SEO", "color": "#10b981", "icon": "search", "isSystem": true, "position": 1, "taskCount": 12 } ]}Successful response
Создать тег
/api/v1/factory/tagsСоздаёт новый тег для задач контент-фабрики.
Request body
namestringrequiredНазвание тега
colorstringHEX цвет, напр. #6366f1
iconstringИконка тега (опционально)
Responses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED409application/jsonРесурс с таким именем уже существует
CONFLICT429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/factory/tagscurl -X POST "https://app.brandfound.ai/api/v1/factory/tags" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "FAQ", "color": "#6366f1", "icon": "help-circle"}'{ "success": true, "data": { "id": "example_id", "name": "example_name", "color": "example_color", "icon": "example_icon", "isSystem": true, "position": 1, "taskCount": 1 }}Successful response
Обновить тег
/api/v1/factory/tags/{id}Частичное обновление тега контент-фабрики.
Query parameters
idstring (uuid)requiredID тега
Request body
namestringcolorstringiconstringpositionintegerПозиция сортировки
Responses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND409application/jsonРесурс с таким именем уже существует
CONFLICT429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/factory/tags/{id}curl -X PATCH "https://app.brandfound.ai/api/v1/factory/tags/{id}" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "FAQ Updated", "color": "#8b5cf6", "position": 2}'{ "success": true, "data": { "id": "example_id", "name": "example_name", "color": "example_color", "icon": "example_icon", "isSystem": true, "position": 1, "taskCount": 1 }}Successful response
Удалить тег
/api/v1/factory/tags/{id}Удаление тега. Системные теги удалить нельзя.
Query parameters
idstring (uuid)requiredID тега
Responses
401application/jsonНеобходима авторизация
UNAUTHORIZED403application/jsonНедостаточно прав
FORBIDDEN404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/factory/tags/{id}curl -X DELETE "https://app.brandfound.ai/api/v1/factory/tags/{id}" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"// No ContentSuccessfully deleted
Список публикаций
/api/v1/factory/publicationsВозвращает список публикаций контент-фабрики с пагинацией.
Query parameters
companyIdstring (uuid)Фильтр по компании
offsetinteger= 0Смещение для пагинации
limitinteger= 20Количество записей на страницу
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/factory/publicationscurl -X GET "https://app.brandfound.ai/api/v1/factory/publications" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": [ { "id": "pub-001", "url": "https://samsung.com/blog/galaxy-s25-faq", "platform": "blog", "publishedAt": "2026-04-10T12:00:00.000Z", "planId": "plan-001", "planTitle": "FAQ по Galaxy S25", "notes": null, "taskId": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "taskTitle": "Написать FAQ по Galaxy S25", "companyId": "clx1abc2d0001abcdef123456" } ], "meta": { "total": 1, "limit": 20, "offset": 0, "hasMore": false }}Successful response
Детекция инсайтов
/api/v1/factory/insightsЗапуск детекторов (15 типов): content gaps, competitor wins, white space, reputation risks и др.
Request body
companyIdstringrequiredID компании
insightTypestringТип инсайта (если не указан — запуск всех детекторов)
CONTENT_GAPCOMPETITOR_WINWHITE_SPACEREPUTATION_RISKKEYWORD_OPPORTUNITYTRENDING_TOPICPROVIDER_BIASSEASONAL_OPPORTUNITYFAQ_OPPORTUNITYCOMPARISON_OPPORTUNITYGUIDE_OPPORTUNITYCASE_STUDY_OPPORTUNITYOPTIMIZATION_NEEDEDAUTHORITY_BUILDINGlimitintegerМаксимальное количество инсайтов
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/factory/insightscurl -X POST "https://app.brandfound.ai/api/v1/factory/insights" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "companyId": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "insightType": "CONTENT_GAP", "limit": 10}'{ "success": true, "data": { "company": "Samsung", "insightsFound": 5, "tasksCreated": 3, "savedTaskIds": [ "task-001", "task-002", "task-003" ], "byType": { "CONTENT_GAP": 2, "COMPETITOR_WIN": 1, "WHITE_SPACE": 2 } }}Successful response
Настройки фабрики
/api/v1/factory/settingsВозвращает текущие настройки контент-фабрики пользователя.
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/factory/settingscurl -X GET "https://app.brandfound.ai/api/v1/factory/settings" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": {}}Successful response
Обновить настройки
/api/v1/factory/settingsОбновление настроек контент-фабрики (deep merge).
Request body
settingsobjectrequiredОбъект настроек для deep merge с текущими
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/factory/settingscurl -X PATCH "https://app.brandfound.ai/api/v1/factory/settings" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "settings": { "defaultPriority": "MEDIUM", "autoEnrich": true, "preferredProviders": [ "chatgpt", "gemini" ] }}'{ "success": true, "data": {}}Successful response
Карта бренда
/api/v1/factory/brand-cardЧтение карты бренда — дерева markdown-документов компании (знания о бренде, учитываются при генерации контента). Три режима: без доп. параметров — вся карта одним markdown (манифест → core-файлы → связанные ссылками → остальные; приватные блоки ```private вырезаны; лимит ~12 000 символов); mode=index — манифест + список файлов с path, id, isCore и исходящими ссылками (граф связей); path=... — один файл: content (ссылки [Имя](brandcard://id) сохранены дословно) + links с резолвом каждой ссылки в путь.
Query parameters
companyIdstring (uuid)requiredID компании
modestringindex — вернуть манифест и список файлов вместо полной карты
indexpathstringПуть файла как в индексе (например "main / settings.md") — вернуть один файл. Регистр не важен
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND/api/v1/factory/brand-cardcurl -X GET "https://app.brandfound.ai/api/v1/factory/brand-card" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": {}}Successful response
Создать/обновить файл карты
/api/v1/factory/brand-cardСоздаёт или полностью перезаписывает файл карты бренда по пути; недостающие папки создаются автоматически, без расширения добавляется .md. Чтобы сослаться на другой файл карты, вставьте в markdown ссылку [Имя](brandcard://<id из индекса>) — она живёт по id (переживает переименование и перенос) и поднимает приоритет целевого файла при генерации. Существующие brandcard://-ссылки при редактировании сохраняйте дословно. Личные заметки и опции оборачивайте в блок ```private — они не отправляются в нейросети.
Request body
companyIdstringrequiredID компании
pathstringrequiredПуть файла, сегменты через "/", например "products / pricing.md"
contentstringrequiredПолный markdown файла (перезаписывает текущее содержимое)
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/factory/brand-cardcurl -X POST "https://app.brandfound.ai/api/v1/factory/brand-card" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "companyId": "9f1c0e2a-…", "path": "products / pricing.md", "content": "# Прайс\n\nТариф Лайт — 1900 ₽/мес.\n\nСм. также: [Настройки](brandcard://b7e2…)"}'{ "success": true, "data": { "path": "example_path", "created": true }}Successful response
Удалить файл/папку карты
/api/v1/factory/brand-cardУдаляет файл или папку карты бренда по пути (папка — каскадно со всем содержимым). Служебный каркас (instruction.md, README.md, core-файлы) удалить нельзя — редактируйте его через POST. После удаления файла ссылки на него становятся висячими: в индексе пропадают из links, при чтении файла отдаются с path=null.
Query parameters
companyIdstring (uuid)requiredID компании
pathstringrequiredПуть файла или папки (как в индексе)
Responses
204Successfully deleted
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/factory/brand-cardcurl -X DELETE "https://app.brandfound.ai/api/v1/factory/brand-card" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": { "deleted": true, "path": "example_path" }}Successful response
Balance and spending
Баланс FoxCoin и история операций
Баланс FoxCoin и прейскурант
/api/v1/billing/balanceОстаток, оборот и цены операций. Кошелёк общий на аккаунт: участники команды тратят из пула владельца. Прейскурант отдаётся здесь, чтобы не зашивать цены в код интеграции.
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/billing/balancecurl -X GET "https://app.brandfound.ai/api/v1/billing/balance" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": { "balance": 1, "totalEarned": 1, "totalSpent": 1, "billingEnabled": true, "pricing": { "coinToRub": 1, "minTopUpRub": 1, "answer": 1, "generatedQuery": 1, "brandCardGeneration": 1, "taskEnrichment": 1, "contentPlan": 1, "articleGeneration": 1, "topicSuggestion": 1, "factCheck": 1 } }}Successful response
История списаний и пополнений
/api/v1/billing/transactionsЖурнал операций кошелька. У списаний за ответы поле query показывает, за какой именно запрос списано.
Query parameters
typestringФильтр по типу операции
ANSWER_CHARGEQUERY_GENERATIONBRAND_CARD_GENERATIONTASK_ENRICHMENTARTICLE_GENERATIONCONTENT_PLANTOPIC_SUGGESTIONFACT_CHECKTOPUPBONUSREFUNDMANUAL_ADJUSTMENTSUBSCRIPTION_CREDITAPI_CALL_FREEfromstring (date-time)Начало окна, ISO-дата (включительно)
tostring (date-time)Конец окна, ISO-дата (включительно)
limitinteger= 50Размер страницы
offsetinteger= 0Сдвиг
Responses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/billing/transactionscurl -X GET "https://app.brandfound.ai/api/v1/billing/transactions" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": [ { "id": "example_id", "amount": 1, "type": "ANSWER_CHARGE", "description": "example_description", "referenceId": "example_referenceId", "referenceType": "example_referenceType", "balanceAfter": 1, "metadata": {}, "createdAt": "2026-01-15T12:00:00Z", "query": { "text": "example_text", "origin": "example_origin", "companyName": "example_companyName" } } ], "meta": { "total": 1, "limit": 1, "offset": 1, "hasMore": true }}Successful response
Reference data
Справочники и контекст ключа
Справочник нейросетей
/api/v1/sourcesКакие ассистенты доступны для опроса и какие из них подставляются по умолчанию. Значение value — то, что принимает providers в POST /api/v1/queries/setup. Имена вне этого списка молча отбрасываются при постановке в очередь.
Query parameters
includeUnpollableboolean= falseДобавить claude (легаси-очередь, в контуре не опрашивается)
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/sourcescurl -X GET "https://app.brandfound.ai/api/v1/sources" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": [ { "value": "chatgpt", "label": "example_label", "pollable": true, "defaultForAccount": true } ]}Successful response
Контекст ключа
/api/v1/contextС чего стоит начинать интеграцию: какому аккаунту принадлежит ключ, какие у него права, какие компании и продукты доступны и какая компания подставляется по умолчанию.
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/contextcurl -X GET "https://app.brandfound.ai/api/v1/context" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true, "data": { "accountId": "example_accountId", "userId": "example_userId", "defaultCompanyId": "example_defaultCompanyId", "companies": [ { "id": "example_id", "name": "example_name", "isDefault": true, "products": [ { "id": "example_id", "name": "example_name" } ] } ], "apiKey": { "name": "example_name", "scopes": [ "example" ], "expiresAt": "2026-01-15T12:00:00Z", "source": "example_source" }, "tokenAccountId": "example_tokenAccountId", "activeAccountId": "example_activeAccountId", "availableWorkspaces": [ { "accountId": "example_accountId", "role": "owner", "ownerName": "example_ownerName", "ownerEmail": "example_ownerEmail", "companiesCount": 0, "isCurrent": true, "teamRoleName": "example_teamRoleName", "teamRoleKey": "example_teamRoleKey" } ] }}Successful response
AI traffic
Переходы на сайт из ответов нейросетей (Яндекс.Метрика)
AI-трафик
/api/v1/analytics/metrika/ai-trafficПереходы на сайт из ответов нейросетей: сколько визитов принесла каждая сеть и как это менялось. Скоуп по аккаунту: чужой integrationId игнорируется. Пустая выдача обычно означает, что Метрика не подключена — проверьте /api/v1/integrations/metrika/status.
Query parameters
integrationIdstring (uuid)Счётчик Метрики. Без него — все подключённые счётчики аккаунта
timeRangestring24h | 7d | 30d | 90d | all
fromstringНачало периода, ISO-дата
tostringКонец периода, ISO-дата
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/analytics/metrika/ai-trafficcurl -X GET "https://app.brandfound.ai/api/v1/analytics/metrika/ai-traffic" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true}Successful response
Посетители из нейросетей
/api/v1/analytics/metrika/visitorsВизиты с AI-источником и поведение на сайте: глубина просмотра, цели, повторные заходы. Скоуп по аккаунту: чужой integrationId игнорируется. Пустая выдача обычно означает, что Метрика не подключена — проверьте /api/v1/integrations/metrika/status.
Query parameters
integrationIdstring (uuid)Счётчик Метрики. Без него — все подключённые счётчики аккаунта
timeRangestring24h | 7d | 30d | 90d | all
fromstringНачало периода, ISO-дата
tostringКонец периода, ISO-дата
hasGoalsbooleanТолько визиты с достигнутыми целями
includeSyntheticbooleanВключить синтетический трафик
pvMinintegerМинимум просмотров страниц
pvMaxintegerМаксимум просмотров страниц
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/analytics/metrika/visitorscurl -X GET "https://app.brandfound.ai/api/v1/analytics/metrika/visitors" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true}Successful response
Воронка AI-трафика
/api/v1/analytics/metrika/traffic-funnelПуть от перехода из ответа нейросети до целевого действия. Скоуп по аккаунту: чужой integrationId игнорируется. Пустая выдача обычно означает, что Метрика не подключена — проверьте /api/v1/integrations/metrika/status.
Query parameters
integrationIdstring (uuid)Счётчик Метрики. Без него — все подключённые счётчики аккаунта
timeRangestring24h | 7d | 30d | 90d | all
fromstringНачало периода, ISO-дата
tostringКонец периода, ISO-дата
hasGoalsbooleanТолько визиты с достигнутыми целями
includeSyntheticbooleanВключить синтетический трафик
pvMinintegerМинимум просмотров страниц
pvMaxintegerМаксимум просмотров страниц
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/analytics/metrika/traffic-funnelcurl -X GET "https://app.brandfound.ai/api/v1/analytics/metrika/traffic-funnel" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true}Successful response
Упоминания против трафика
/api/v1/analytics/metrika/correlationСопоставляет динамику упоминаний бренда с динамикой реальных переходов: даёт ли рост видимости рост трафика. Скоуп по аккаунту: чужой integrationId игнорируется. Пустая выдача обычно означает, что Метрика не подключена — проверьте /api/v1/integrations/metrika/status.
Query parameters
companyIdstring (uuid)Компания. Без него подставляется preferredCompanyId ключа
integrationIdstring (uuid)Счётчик Метрики. Без него — все подключённые счётчики аккаунта
timeRangestring24h | 7d | 30d | 90d | all
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/analytics/metrika/correlationcurl -X GET "https://app.brandfound.ai/api/v1/analytics/metrika/correlation" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true}Successful response
Цели Метрики
/api/v1/analytics/metrika/goalsСправочник целей счётчика — что стоит за параметром hasGoals в остальных методах. Скоуп по аккаунту: чужой integrationId игнорируется. Пустая выдача обычно означает, что Метрика не подключена — проверьте /api/v1/integrations/metrika/status.
Query parameters
integrationIdstring (uuid)Счётчик Метрики. Без него — все подключённые счётчики аккаунта
includeInactivebooleanВключить неактивные цели
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/analytics/metrika/goalscurl -X GET "https://app.brandfound.ai/api/v1/analytics/metrika/goals" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true}Successful response
Сводка по синтетическому трафику
/api/v1/analytics/metrika/synthetic/summaryДоля ботовых и неорганических визитов, чтобы они не искажали выводы по AI-трафику. Скоуп по аккаунту: чужой integrationId игнорируется. Пустая выдача обычно означает, что Метрика не подключена — проверьте /api/v1/integrations/metrika/status.
Query parameters
integrationIdstring (uuid)Счётчик Метрики. Без него — все подключённые счётчики аккаунта
timeRangestring24h | 7d | 30d | 90d | all
fromstringНачало периода, ISO-дата
tostringКонец периода, ISO-дата
filterstringФильтр классификации
hasGoalsbooleanТолько визиты с достигнутыми целями
pvMinintegerМинимум просмотров страниц
pvMaxintegerМаксимум просмотров страниц
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/analytics/metrika/synthetic/summarycurl -X GET "https://app.brandfound.ai/api/v1/analytics/metrika/synthetic/summary" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true}Successful response
Список синтетических визитов
/api/v1/analytics/metrika/synthetic/listПостраничная детализация к сводке: конкретные визиты с признаками синтетики. Скоуп по аккаунту: чужой integrationId игнорируется. Пустая выдача обычно означает, что Метрика не подключена — проверьте /api/v1/integrations/metrika/status.
Query parameters
integrationIdstring (uuid)Счётчик Метрики. Без него — все подключённые счётчики аккаунта
timeRangestring24h | 7d | 30d | 90d | all
fromstringНачало периода, ISO-дата
tostringКонец периода, ISO-дата
filterstringФильтр классификации
qstringПоиск
qScopestringОбласть поиска
hasRevenuebooleanТолько с доходом
returningOnlybooleanТолько вернувшиеся
pageintegerСтраница
pageSizeintegerРазмер страницы
sortBystringПоле сортировки
sortOrderstringasc | desc
hasGoalsbooleanТолько визиты с достигнутыми целями
pvMinintegerМинимум просмотров страниц
pvMaxintegerМаксимум просмотров страниц
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/analytics/metrika/synthetic/listcurl -X GET "https://app.brandfound.ai/api/v1/analytics/metrika/synthetic/list" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true}Successful response
Подключённые счётчики
/api/v1/integrations/metrika/listС этого метода начинается работа с AI-трафиком: возвращает integrationId для остальных методов раздела.
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/integrations/metrika/listcurl -X GET "https://app.brandfound.ai/api/v1/integrations/metrika/list" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true}Successful response
Состояние интеграции
/api/v1/integrations/metrika/statusПодключена ли Метрика, когда была синхронизация и не истёк ли доступ. Пустая выдача методов раздела объясняется здесь.
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/integrations/metrika/statuscurl -X GET "https://app.brandfound.ai/api/v1/integrations/metrika/status" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true}Successful response
Commerce
Товарные карточки в ответах нейросетей
Коммерс-аналитика
/api/v1/analytics/commerceТоварные карточки, которые нейросети показывают вместе с текстом ответа. view=summary — доля ответов с карточками и динамика по сетям; sellers — топ продавцов и доменов; brands — карточки нашего бренда против конкурентов; cards — постраничный список.
Query parameters
viewstring= summarysummary | sellers | brands | cards
summarysellersbrandscardscompanyIdstring (uuid)Компания. Без него подставляется preferredCompanyId ключа
productIdstring[]Можно передать несколько
timeRangestring24h | 7d | 30d | 90d | all
granularitystringРазрез динамики
tzstringЧасовой пояс
labelIdstring[]Кластеры
labelSlugstring[]Кластеры по slug
labelFilterModestringAND | OR
sourceIdstring[]Источники
queryTypestring[]Типы запросов
includeDemobooleanВключить демо-данные
Responses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND/api/v1/analytics/commercecurl -X GET "https://app.brandfound.ai/api/v1/analytics/commerce" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true}Successful response
Отслеживаемые товары
/api/v1/commerce/productsНоменклатура для сопоставления с карточками в ответах. Без неё раздел «Коммерс» показывает продавцов и домены, но не «наш товар против чужого».
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/commerce/productscurl -X GET "https://app.brandfound.ai/api/v1/commerce/products" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true}Successful response
Добавить товар
/api/v1/commerce/productsResponses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/commerce/productscurl -X POST "https://app.brandfound.ai/api/v1/commerce/products" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true}Successful response
Monitoring
Регулярный опрос запросов по расписанию
Запросы на мониторинге
/api/v1/favorite-queriesСписок запросов, поставленных на регулярный опрос.
Query parameters
searchstringПоиск по тексту
activebooleanТолько включённые
Responses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED/api/v1/favorite-queriescurl -X GET "https://app.brandfound.ai/api/v1/favorite-queries" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true}Successful response
Поставить запрос на мониторинг
/api/v1/favorite-queriesОбычный POST /api/v1/queries опрашивает нейросети ОДИН раз. Регулярный опрос — это отдельная сущность, и создаётся она здесь. Создание записи опрос ещё не запускает: расписание задаётся вторым шагом, через POST /api/v1/favorite-queries/{id}/assignments. Каждый опрос по расписанию платный: 10 FoxCoin за ответ КАЖДОЙ нейросети. Интервал 60 минут по трём сетям — это 720 ответов в сутки. При нехватке средств опросы уходят на паузу и сами не возобновятся (POST /api/v1/queries/queue/resume).
Request body
textstringrequiredtypestringrequiredcompanyIdstringproductIdstringlanguagestring= ruregionstring= RUisActiveboolean= truetagsstring[]Responses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/favorite-queriescurl -X POST "https://app.brandfound.ai/api/v1/favorite-queries" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "text": "best threat intelligence vendors for banks in UAE", "type": "comparative", "companyId": "e08cf948-88b4-4aac-949e-6c1cc3b4f427", "language": "en", "region": "AE"}'{ "success": true}Successful response
Запись мониторинга
/api/v1/favorite-queries/{id}Query parameters
idstring (uuid)requiredResponses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND/api/v1/favorite-queries/{id}curl -X GET "https://app.brandfound.ai/api/v1/favorite-queries/{id}" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true}Successful response
Изменить запись
/api/v1/favorite-queries/{id}Текст, компания, теги, isActive. Снять с опроса без удаления — isActive: false.
Query parameters
idstring (uuid)requiredResponses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/favorite-queries/{id}curl -X PATCH "https://app.brandfound.ai/api/v1/favorite-queries/{id}" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true}Successful response
Снять с мониторинга
/api/v1/favorite-queries/{id}Удаляет запись вместе с расписанием: следующего опроса не будет. Уже полученные ответы и упоминания остаются — они принадлежат запросу, а не подписке.
Query parameters
idstring (uuid)requiredResponses
204Successfully deleted
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/favorite-queries/{id}curl -X DELETE "https://app.brandfound.ai/api/v1/favorite-queries/{id}" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true}Successful response
Расписание опроса
/api/v1/favorite-queries/{id}/assignmentsQuery parameters
idstring (uuid)requiredResponses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND/api/v1/favorite-queries/{id}/assignmentscurl -X GET "https://app.brandfound.ai/api/v1/favorite-queries/{id}/assignments" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true}Successful response
Задать расписание
/api/v1/favorite-queries/{id}/assignmentsИменно здесь запрос начинает опрашиваться регулярно: запись без расписания ничего не делает. Расписание одно на запись, повторный вызов его перезаписывает. Каждый опрос по расписанию платный: 10 FoxCoin за ответ КАЖДОЙ нейросети. Интервал 60 минут по трём сетям — это 720 ответов в сутки. При нехватке средств опросы уходят на паузу и сами не возобновятся (POST /api/v1/queries/queue/resume).
Query parameters
idstring (uuid)requiredRequest body
providersstring[]requiredСписок: GET /api/v1/sources
frequencyMinutesintegerrequiredИнтервал между опросами
isEnabledboolean= trueПауза без удаления расписания
timezonestring= Europe/MoscowВ нём считаются daysOfWeek и hoursWindow
daysOfWeekinteger[]1..7, пусто = каждый день
hoursWindowobjectОкно часов, вне которого опрос не идёт
modelobjectКарта «нейросеть → модель»
Responses
200Successful response
400application/jsonОшибка валидации
VALIDATION_ERROR401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/favorite-queries/{id}/assignmentscurl -X POST "https://app.brandfound.ai/api/v1/favorite-queries/{id}/assignments" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "providers": [ "chatgpt", "perplexity", "gemini" ], "frequencyMinutes": 1440, "timezone": "Europe/Moscow"}'{ "success": true}Successful response
Опросить сейчас
/api/v1/favorite-queries/{id}/run-nowВнеочередной опрос, не дожидаясь расписания и не сдвигая его. Платно на общих основаниях.
Query parameters
idstring (uuid)requiredResponses
200Successful response
401application/jsonНеобходима авторизация
UNAUTHORIZED404application/jsonРесурс не найден
NOT_FOUND429application/jsonПревышен лимит запросов. Повторите через 60 секунд.
RATE_LIMIT_EXCEEDED/api/v1/favorite-queries/{id}/run-nowcurl -X POST "https://app.brandfound.ai/api/v1/favorite-queries/{id}/run-now" \ -H "Authorization: Bearer gfx_YOUR_API_KEY" \ -H "Content-Type: application/json"{ "success": true}Successful response