brandfound.

Command Palette

Search for a command to run...

v1.2.0

brandfound. API

API pour suivre les mentions de marque dans les assistants IA (ChatGPT, Gemini, Claude, Perplexity). Gestion des entreprises, produits, concurrents, requêtes, mentions et analytique.

URL de base

https://app.brandfound.ai/api/v1

Playground

Cliquez sur dans le panneau de la requête pour ouvrir le Playground interactif. Sélectionnez une clé API, indiquez les paramètres et envoyez la requête directement depuis la documentation.

Démarrage rapide
1
2
curl -H "Authorization: Bearer gfx_YOUR_API_KEY" \
https://app.brandfound.ai/api/v1/companies
Réponse réussie
1
2
3
4
5
6
{
"success": true,
"data": {
"...": "..."
}
}
Erreur
1
2
3
4
5
6
7
{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Introuvable"
}
}
Limites de requêtes
Par adresse IP120 / min
Par utilisateur60 / min
Codes d'erreur
401
UNAUTHORIZEDAutorisation invalide
403
FORBIDDENAutorisations insuffisantes
404
NOT_FOUNDRessource introuvable
400
VALIDATION_ERRORErreur de validation
429
RATE_LIMIT_EXCEEDEDLimite dépassée
500
INTERNAL_ERRORErreur interne

Nouveautés de la version 1.2

Les adresses publiques des méthodes n ont pas changé, la compatibilité est préservée.

L analytique répond de nouveau

Les méthodes des sections Analytique, Liens et Publicité renvoyaient une erreur 500 due à un problème de notre côté. Corrigé, aucune action de votre part.

État de la requête visible

La liste des requêtes contient désormais answersCount, la liste réelle des assistants dans providers et le statut synthétique queue.status. Auparavant providers arrivait toujours vide.

File d attente des interrogations

queries/queue et queue/summary montrent ce qui est interrogé et ce que cela coûte. Les interrogations arrêtées faute de FoxCoin se relancent via queue/resume, elles ne repartent pas seules.

Solde et dépenses

billing/balance renvoie le solde et les tarifs de toutes les opérations, billing/transactions l historique des débits avec la requête concernée.

Langue de la réponse

Le champ language définit désormais la langue de la réponse. Fonctionne dans ChatGPT, Gemini, Perplexity et DeepSeek.

Répertoire des assistants

La méthode sources renvoie les assistants disponibles et marque ceux utilisés par défaut.

Surveillance

Une requête peut être interrogée régulièrement selon un calendrier. Ce n était possible que dans l interface.

Trafic IA

Visites du site issues des réponses IA, comportement des visiteurs, entonnoir et objectifs selon Yandex.Metrica.

Commerce

Fiches produits dans les réponses IA et catalogue de rapprochement.

L entreprise devient obligatoire

Les méthodes links, links/filter-options, analytics/links/top-domains, analytics/competitors/preview et advertising exigent companyId. Sans lui, la réponse fusionnait toutes les entreprises du compte.

Pour les assistants IA

Copiez les instructions de l'API et transmettez-les à un assistant IA (ChatGPT, Claude, Gemini, etc.) — il pourra alors composer des requêtes vers l'API brandfound. pour vous. La clé API n'est pas incluse dans le texte copié.

À côté de chaque méthode et section, un bouton permet de copier la description d'une méthode précise ou de toute la catégorie.

La clé API n'est pas incluse — collez-la séparément ou utilisez le Playground.

Authentification

Toutes les requêtes API nécessitent une autorisation. Créez une clé API dans la section Paramètres → Clés API. Les clés ont le préfixe gfx_.

Bearer Token
Recommandé

Transmettez la clé dans l'en-tête Authorization de chaque requête.

Cookie de session

L'application web utilise automatiquement le cookie session-token. Aucune configuration supplémentaire n'est requise.

Exemple de requête
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/companies" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
Exemple de réponse
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"success": true,
"data": [
{
"id": "comp_123",
"name": "Mon entreprise",
"slug": "my-company"
}
],
"meta": {
"total": 1,
"limit": 20,
"offset": 0,
"hasMore": false
}
}

Espaces de travail

Espaces de travail (workspaces / teams). Un même jeton OAuth peut accéder à tous les espaces accessibles à l’utilisateur : le sien et ceux où il est ACCEPTED TeamMember. L’espace actif est enregistré dans ApiKey.activeAccountId ; le changement persiste et s’applique à tous les clients MCP de cette clé dès leur prochaine requête. Les droits sont vérifiés à chaque requête : si l’utilisateur perd son appartenance, le middleware revient silencieusement au accountId attribué lors d’OAuth, sans erreur 401. Le changement réinitialise preferredCompanyId, lié à l’ancien espace.

Lister les espaces accessibles

/api/v1/workspaces

Renvoie tous les workspaces (accountId) accessibles à l’utilisateur actuel : son propre espace et ceux où il est ACCEPTED TeamMember. `isCurrent: true` indique l’espace actuellement utilisé par la clé API, en tenant compte de la substitution activeAccountId.

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/workspaces
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/workspaces" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"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"
}
}

Réponse réussie

Changer l’espace actif de la clé API

/api/v1/workspaces/switch

Met à jour ApiKey.activeAccountId. L’effet persiste pour TOUTES les requêtes suivantes de cette clé, y compris celles d’autres clients MCP. accountId=null supprime la substitution et rétablit le accountId du jeton. preferredCompanyId est réinitialisé à null, car il appartient à l’ancien espace. Uniquement avec l’authentification par clé API.

Corps de la requête

accountIdstringobligatoire

UUID du workspace cible. null supprime la substitution active et rétablit le accountId attribué lors d’OAuth.

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
403application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/workspaces/switch
1
2
3
4
5
6
curl -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"
}'
1
2
3
4
5
6
7
8
9
10
{
"success": true,
"data": {
"apiKeyId": "example_apiKeyId",
"tokenAccountId": "example_tokenAccountId",
"activeAccountId": "example_activeAccountId",
"effectiveAccountId": "example_effectiveAccountId",
"preferredCompanyIdReset": true
}
}

Réponse réussie

Entreprises

Gestion des entreprises

Lister les entreprises

/api/v1/companies

Renvoie les entreprises de l’utilisateur avec leurs produits, concurrents et mots-clés.

Paramètres de requête

offsetinteger= 0

Décalage de pagination

limitinteger= 20

Nombre d’enregistrements par page

sortBystring= createdAt
createdAtupdatedAtnamelastUsedAt
sortOrderstring= desc

Ordre de tri

ascdesc
searchstring

Texte de recherche, sans distinction de casse

categoryIdstring (uuid)

Filtrer par catégorie

countrystring

Filtrer par pays

createdAtFromstring (date-time)

Début de la plage des dates de création (ISO 8601)

createdAtTostring (date-time)

Fin de la plage des dates de création (ISO 8601)

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/companies
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/companies" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
{
"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
}
}

Réponse réussie

Créer une entreprise

/api/v1/companies

Crée une entreprise. La limite dépend de l’abonnement.

Corps de la requête

namestringobligatoire
descriptionstring
urlstring
categoryIdstring
countrystring

ISO 3166-1 alpha-2 (« AE »). Les anciens noms (« russia ») sont acceptés et normalisés. Préférez regionTargets : ce champ est hérité.

synonymsstring[]

Synonymes/noms alternatifs (20 maximum)

regionTargetsobject[]

Pays et villes de mesure. État COMPLET : les anciennes cibles sont recréées. La cible primary définit le pays et la langue de la génération automatique de requêtes.

defaultLanguageIdstring

Langue des requêtes générées (GET /api/v1/geo/languages).

defaultResponseLanguageIdstring

Langue dans laquelle l’IA doit répondre.

defaultLocalestring

BCP-47, par exemple « ar-AE ».

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/companies
1
2
3
4
5
6
7
8
9
10
11
12
13
curl -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",
"Самсунг"
]
}'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"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"
}
}

Réponse réussie

Obtenir l'entreprise

/api/v1/companies/{id}

Renvoie les informations complètes sur l’entreprise, dont ses produits, concurrents et mots-clés.

Paramètres de requête

idstring (uuid)obligatoire

ID de l’entreprise

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
GET/api/v1/companies/{id}
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/companies/{id}" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
{
"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": "Электроника"
}
}
}

Réponse réussie

Mettre à jour l'entreprise

/api/v1/companies/{id}

Met à jour partiellement une entreprise. Ne transmettez que les champs à modifier. Paramètres régionaux : regionTargets définit les pays et villes de mesure ; la cible primary détermine le pays et la langue des suggestions automatiques de requêtes (POST /api/v1/queries/autogenerate). countryId / cityId proviennent de GET /api/v1/geo/countries et /api/v1/geo/cities, defaultLanguageId de /api/v1/geo/languages. regionTargets représente l’état COMPLET : les anciennes cibles sont recréées. Le champ isAutoGenerationEnabled est obsolète : l’activation (true) est IGNORÉE. Il appartenait à un planificateur supprimé qui générait les requêtes et les envoyait immédiatement dans la file d’exécution payante.

Paramètres de requête

idstring (uuid)obligatoire

ID de l’entreprise

Corps de la requête

namestring
descriptionstring
urlstring
categoryIdstring
countrystring

ISO 3166-1 alpha-2 (« AE »). Les anciens noms (« russia ») sont acceptés et normalisés. Préférez regionTargets : ce champ est hérité.

synonymsstring[]
isAutoGenerationEnabledboolean

OBSOLÈTE et IGNORÉ lorsque sa valeur est true. Ce champ appartenait à un planificateur supprimé qui générait les requêtes et les envoyait immédiatement dans la file d’exécution payante. Pour générer sans exécuter : POST /api/v1/queries/autogenerate.

regionTargetsobject[]

Pays et villes de mesure. État COMPLET : les anciennes cibles sont recréées. La cible primary définit le pays et la langue de la génération automatique de requêtes.

defaultLanguageIdstring

Langue des requêtes générées (GET /api/v1/geo/languages).

defaultResponseLanguageIdstring

Langue dans laquelle l’IA doit répondre.

defaultLocalestring

BCP-47, par exemple « ar-AE ».

autogenQueryTypesstring[]

Types de requêtes générées automatiquement. Par défaut : commercial, informational, comparative, reputational. Retirer comparative supprime les comparaisons « X vs Y » des requêtes générées.

autogenQueriesPerRuninteger

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
PUT/api/v1/companies/{id}
1
2
3
4
5
6
7
8
9
10
11
12
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",
"Самсунг",
"삼성"
]
}'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"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"
}
}

Réponse réussie

Archiver l'entreprise

/api/v1/companies/{id}

Archive l’entreprise. Les données sont conservées, mais l’entreprise disparaît des listes.

Paramètres de requête

idstring (uuid)obligatoire

ID de l’entreprise

Réponses

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
DELETE/api/v1/companies/{id}
1
2
3
curl -X DELETE "https://app.brandfound.ai/api/v1/companies/{id}" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
// No Content

Suppression réussie

Lister les secteurs

/api/v1/companies/categories

Valeurs categoryId autorisées pour créer ou modifier une entreprise.

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/companies/categories
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/companies/categories" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
{
"success": true,
"data": [
{
"id": "example_id",
"name": "example_name"
}
]
}

Réponse réussie

Produits

Gestion des produits

Lister les produits

/api/v1/products

Renvoie les produits avec les entreprises, mots-clés et concurrents associés.

Paramètres de requête

offsetinteger= 0

Décalage de pagination

limitinteger= 20

Nombre d’enregistrements par page

sortBystring= createdAt
createdAtupdatedAtname
sortOrderstring= desc

Ordre de tri

ascdesc
companyIdstring (uuid)

Filtrer par entreprise

searchstring

Texte de recherche, sans distinction de casse

createdAtFromstring (date-time)

Début de la plage des dates de création (ISO 8601)

createdAtTostring (date-time)

Fin de la plage des dates de création (ISO 8601)

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/products
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/products" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
"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
}
}

Réponse réussie

Créer un produit

/api/v1/products

Crée un produit associé à une entreprise.

Corps de la requête

namestringobligatoire
companyIdstringobligatoire
descriptionstring
urlstring

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/products
1
2
3
4
5
6
7
8
9
curl -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"
}'
1
2
3
4
5
6
7
8
9
10
11
12
{
"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"
}
}

Réponse réussie

Obtenir le produit

/api/v1/products/{id}

Renvoie les informations complètes sur le produit, dont ses mots-clés et concurrents.

Paramètres de requête

idstring (uuid)obligatoire

ID du produit

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
GET/api/v1/products/{id}
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/products/{id}" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
{
"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"
}
]
}
]
}
}

Réponse réussie

Mettre à jour le produit

/api/v1/products/{id}

Met à jour partiellement un produit.

Paramètres de requête

idstring (uuid)obligatoire

ID du produit

Corps de la requête

namestring
descriptionstring
urlstring

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
PUT/api/v1/products/{id}
1
2
3
4
5
6
7
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"
}'
1
2
3
4
5
6
7
8
9
10
11
12
{
"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"
}
}

Réponse réussie

Archiver le produit

/api/v1/products/{id}

Archive le produit. Les données sont conservées, mais le produit disparaît des listes.

Paramètres de requête

idstring (uuid)obligatoire

ID du produit

Réponses

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
DELETE/api/v1/products/{id}
1
2
3
curl -X DELETE "https://app.brandfound.ai/api/v1/products/{id}" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
// No Content

Suppression réussie

Concurrents

Gestion des concurrents

Lister les concurrents

/api/v1/competitors

Renvoie les concurrents avec les entreprises, produits et mots-clés associés.

Paramètres de requête

offsetinteger= 0

Décalage de pagination

limitinteger= 20

Nombre d’enregistrements par page

sortBystring= createdAt
createdAtupdatedAtname
sortOrderstring= desc

Ordre de tri

ascdesc
companyIdstring (uuid)

Filtrer par entreprise

productIdstring (uuid)

Filtrer par produit

searchstring

Texte de recherche, sans distinction de casse

createdAtFromstring (date-time)

Début de la plage des dates de création (ISO 8601)

createdAtTostring (date-time)

Fin de la plage des dates de création (ISO 8601)

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/competitors
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/competitors" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
"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
}
}

Réponse réussie

Créer un concurrent

/api/v1/competitors

Crée un concurrent, associé soit à une entreprise, soit à un produit précis.

Corps de la requête

namestringobligatoire
companyIdstringobligatoire
productIdstring
urlstring

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/competitors
1
2
3
4
5
6
7
8
curl -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"
}'
1
2
3
4
5
6
7
8
9
10
11
12
{
"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"
}
}

Réponse réussie

Obtenir le concurrent

/api/v1/competitors/{id}

Renvoie les informations complètes sur le concurrent et ses mots-clés.

Paramètres de requête

idstring (uuid)obligatoire

ID du concurrent

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
GET/api/v1/competitors/{id}
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/competitors/{id}" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
"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"
}
]
}
}

Réponse réussie

Mettre à jour le concurrent

/api/v1/competitors/{id}

Met à jour le nom et/ou l’URL du concurrent.

Paramètres de requête

idstring (uuid)obligatoire

ID du concurrent

Corps de la requête

namestring
urlstring

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
PUT/api/v1/competitors/{id}
1
2
3
4
5
6
7
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"
}'
1
2
3
4
5
6
7
8
9
10
11
12
{
"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"
}
}

Réponse réussie

Archiver le concurrent

/api/v1/competitors/{id}

Archive le concurrent. Les données sont conservées, mais le concurrent disparaît des listes.

Paramètres de requête

idstring (uuid)obligatoire

ID du concurrent

Réponses

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
DELETE/api/v1/competitors/{id}
1
2
3
curl -X DELETE "https://app.brandfound.ai/api/v1/competitors/{id}" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
// No Content

Suppression réussie

Mots-clés

Intentions (keywords) : création, renommage, archivage/suppression, restore, association/dissociation en masse aux entreprises, produits et concurrents

Lister les intentions

/api/v1/keywords

Renvoie les intentions (keywords) du workspace actuel. Le filtre target accepte un seul champ parmi companyId | productId | competitorId. state contrôle l’archivage : active (par défaut), archived ou all.

Paramètres de requête

offsetinteger= 0

Décalage de pagination

limitinteger= 20

Nombre d’enregistrements par page

sortBystring= createdAt
createdAtname
sortOrderstring= desc

Ordre de tri

ascdesc
statestring= active

Filtre de cycle de vie : active (non archivés, par défaut), archived (archivés uniquement), all.

activearchivedall
searchstring

Sous-chaîne de name, sans distinction de casse.

companyIdstring (uuid)

Uniquement les intentions ayant une association active avec cette entreprise.

productIdstring (uuid)

Uniquement les intentions ayant une association active avec ce produit.

competitorIdstring (uuid)

Uniquement les intentions ayant une association active avec ce concurrent.

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/keywords
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/keywords" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
{
"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
}
}

Réponse réussie

Créer ou réutiliser une intention

/api/v1/keywords

Recherche ou crée selon (name, userId). Une intention existante est réutilisée et restaurée si elle était archivée. Le champ facultatif attach: { companyId | productId | competitorId }, avec exactement une cible, associe l’intention à cette cible dans la même transaction.

Corps de la requête

namestringobligatoire
attachobject

Cible d’association/dissociation. Doit contenir EXACTEMENT UN des champs.

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/keywords
1
2
3
4
5
6
7
8
9
curl -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"
}
}'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
{
"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": "..."
}
}

Réponse réussie

Obtenir une intention

/api/v1/keywords/{id}

Renvoie l’intention avec ses associations actives aux entreprises, produits et concurrents.

Paramètres de requête

idstring (uuid)obligatoire

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
GET/api/v1/keywords/{id}
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/keywords/{id}" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
{
"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"
}
}
]
}
}

Réponse réussie

Renommer une intention

/api/v1/keywords/{id}

Seul name est modifiable. Une intention archivée ne peut pas être renommée : utilisez d’abord restore.

Paramètres de requête

idstring (uuid)obligatoire

Corps de la requête

namestringobligatoire

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
PUT/api/v1/keywords/{id}
1
2
3
4
5
6
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"
}'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
{
"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"
}
}
]
}
}

Réponse réussie

Archiver ou supprimer une intention

/api/v1/keywords/{id}

Par défaut, archive l’intention et toutes ses associations (soft-delete), opération réversible via POST /restore. ?permanent=true la supprime physiquement de la base ; elle doit déjà être archivée ou avoir des associations archivées. ?dryRun=true renvoie un rapport des éléments concernés sans exécuter l’opération.

Paramètres de requête

idstring (uuid)obligatoire
permanentboolean= false

true déclenche une suppression irréversible de la base. L’élément doit être archivé.

dryRunboolean= false

true renvoie un rapport sans effets de bord.

Réponses

204

Suppression réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
DELETE/api/v1/keywords/{id}
1
2
3
curl -X DELETE "https://app.brandfound.ai/api/v1/keywords/{id}" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
{
"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"
}
}
]
}
}
}

Réponse réussie

Restaurer une intention archivée

/api/v1/keywords/{id}/restore

Supprime archivedAt du keyword et de ses associations archivées dont les entités parentes (company / product / competitor) existent encore. Les associations aux cibles supprimées restent archivées.

Paramètres de requête

idstring (uuid)obligatoire

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/keywords/{id}/restore
1
2
3
curl -X POST "https://app.brandfound.ai/api/v1/keywords/{id}/restore" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
{
"success": true,
"data": {
"keywordId": "example_keywordId",
"restoredLinks": {
"company": 0,
"product": 0,
"competitor": 0
}
}
}

Réponse réussie

Associer des intentions en lot

/api/v1/keywords/attach

Pour chaque name, recherche ou crée selon (name, userId), puis garantit une association active avec target. Restaure les associations archivées. target exige EXACTEMENT UN champ parmi companyId / productId / competitorId.

Corps de la requête

targetobjectobligatoire

Cible d’association/dissociation. Doit contenir EXACTEMENT UN des champs.

namesstring[]obligatoire

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/keywords/attach
1
2
3
4
5
6
7
8
9
10
11
12
curl -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"
]
}'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{
"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"
}
]
}
}

Réponse réussie

Dissocier des intentions en lot

/api/v1/keywords/detach

Archive les associations actives keyword↔target. L’intention reste disponible et peut être associée à d’autres cibles. target exige EXACTEMENT UN champ parmi companyId / productId / competitorId.

Corps de la requête

targetobjectobligatoire

Cible d’association/dissociation. Doit contenir EXACTEMENT UN des champs.

keywordIdsstring[]obligatoire

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/keywords/detach
1
2
3
4
5
6
7
8
9
10
11
curl -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"
]
}'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"success": true,
"data": {
"target": {
"companyId": "example_companyId",
"productId": "example_productId",
"competitorId": "example_competitorId"
},
"detached": [
"example"
],
"notAttached": [
"example"
]
}
}

Réponse réussie

Requêtes

Gestion des requêtes adressées aux assistants IA

Lister les requêtes

/api/v1/queries

Renvoie les requêtes adressées aux assistants IA et leur nombre de réponses. Filtres avancés par sentiment, groupes, régions, favoris, périmètre de recherche et plages de scores de sentiment. Consultez queue.status et answersCount pour connaître l’état de l’exécution. providers indique les IA effectivement interrogées. Détails des exécutions : GET /api/v1/queries/queue.

Paramètres de requête

offsetinteger= 0

Décalage de pagination

limitinteger= 20

Nombre d’enregistrements par page

sortBystring= createdAt
createdAttextupdatedAt
sortOrderstring= desc

Ordre de tri

ascdesc
companyIdstring (uuid)

Filtrer par entreprise

productIdstring (uuid)

Filtrer par produit

typestring

Type de requête (general, comparative, negative, etc.). Accepte un tableau : ?type=comparative&type=neutral

originstring

Origine de la requête. Accepte un tableau : ?origin=manual&origin=auto

manualauto
hasAnswersstring

Présence de réponses

truefalse
languagestring

Langue de la requête (ru, en, etc.). Accepte un tableau : ?language=ru&language=en

searchTextstring

Recherche dans le texte de la requête

providerstring

Filtrer par fournisseur IA de la réponse

sourceIdstring

Filtrer par ID de source de la réponse. Accepte un tableau : ?sourceId=id1&sourceId=id2

labelSlugstring

Filtrer par slug du groupe/de l’étiquette

regionstring

Région de la requête. Accepte un tableau : ?region=RU&region=US

isFavoritestring

Uniquement les requêtes favorites

truefalse
sentimentstring

Filtrer par sentiment des mentions dans les réponses

positiveneutralnegative
searchFieldstring= query

Périmètre de searchText : texte des requêtes, réponses ou sources

queryanswersources
labelFilterModestring= or

Logique du filtre par groupes : any (or) ou all (and)

orand
labelstring

Slug du groupe. Accepte un tableau : ?label=slug1&label=slug2

createdAtFromstring (date-time)

Début de la plage des dates de création (ISO 8601)

createdAtTostring (date-time)

Fin de la plage des dates de création (ISO 8601)

showArchivedstring

Afficher les requêtes archivées (par défaut : false)

truefalse

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/queries
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/queries" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
{
"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
}
}

Réponse réussie

Créer une requête

/api/v1/queries

Crée une requête et, par défaut, la place immédiatement dans la file d’exécution. Payant : chaque réponse reçue de chaque IA débite des FoxCoin (tarifs : GET /api/v1/billing/balance). Une requête envoyée à 5 IA coûte 5 réponses. Utilisez dispatch: false pour créer la requête sans dépenser de FoxCoin. Le champ providers sélectionne les IA (slugs : GET /api/v1/sources). S’il est absent, les paramètres par défaut du compte sont utilisés ; sans configuration, il s’agit uniquement de ChatGPT. Pour créer des requêtes en masse avec des groupes : POST /api/v1/queries/setup. Les champs region (ISO 3166-1 alpha-2) et language définissent la zone géographique. Sans region, le pays de l’entreprise est utilisé. geoOverride et resolvedGeoSnapshot sont des instantanés READ-ONLY calculés par le serveur pour les requêtes de groupes ayant des cibles géographiques. Ils ne sont pas acceptés dans POST : le corps est strict et tout champ inconnu provoque une erreur 400. Consultez dispatch dans la réponse pour le résultat de mise en file : dispatched=false avec un error non vide signifie que la requête a été créée, mais que l’exécution n’a pas démarré.

Corps de la requête

textstringobligatoire
companyIdstringobligatoire
productIdstring
typestring= neutral

Les anciennes valeurs negative et general sont acceptées : negative → reputational, general → neutral.

neutralcommercialinformationalcomparativereputationalbranded
languagestring= ru

Code ISO 639-1 de la langue de réponse (ru, en, ar, hi, vi, ms, ...). Définit la langue imposée à l’IA : une instruction explicite avec le nom de la langue issu du répertoire est ajoutée au prompt. Par défaut : ru.

regionstring

Pays de la requête, ISO 3166-1 alpha-2 (AE, SA, RU). Si absent, utilise le pays de l’entreprise (regionTarget primary), puis RU. Les anciens noms (« russia ») sont acceptés et normalisés. Ne géocible pas les résultats ; sert aux filtres et aux analyses.

providersstring[]

IA à interroger. Si absent, utilise les valeurs par défaut du compte ; sans configuration, uniquement ChatGPT.

dispatchboolean= true

false crée la requête SANS lancer d’exécution payante.

labelsstring[]

Noms des groupes : créés ou réutilisés selon le slug.

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
402application/json

Solde FoxCoin insuffisant

HTTP_402
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/queries
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
curl -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"
]
}'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
"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
}
}
}

Réponse réussie

Obtenir la requête

/api/v1/queries/{id}

Renvoie la requête, les réponses des assistants IA et les mentions détectées.

Paramètres de requête

idstring (uuid)obligatoire

ID de la requête

includeAnswersstring= true

Inclure les réponses avec leurs mentions (true par défaut)

truefalse

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
GET/api/v1/queries/{id}
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/queries/{id}" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
{
"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": []
}
]
}
]
}
}

Réponse réussie

Archiver la requête

/api/v1/queries/{id}

Archive la requête. Les données sont conservées et peuvent être restaurées.

Paramètres de requête

idstring (uuid)obligatoire

ID de la requête

Réponses

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
DELETE/api/v1/queries/{id}
1
2
3
curl -X DELETE "https://app.brandfound.ai/api/v1/queries/{id}" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
// No Content

Suppression réussie

Modifier une requête

/api/v1/queries/{id}

Modifie le texte, le type, la langue, la région, le produit, le statut de favori et les groupes de la requête. Modifier le texte ne relance PAS les IA : les réponses existantes restent associées à la requête. Créez une nouvelle requête pour les interroger à nouveau. Corps strict : champ inconnu → 400.

Paramètres de requête

idstring (uuid)obligatoire

Corps de la requête

textstring
typestring
neutralcommercialinformationalcomparativereputationalbranded
languagestring
regionstring

ISO 3166-1 alpha-2.

productIdstring

null dissocie la requête du produit.

isFavoriteboolean
labelsstring[]

Liste COMPLÈTE des groupes : les associations sont recréées.

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
PATCH/api/v1/queries/{id}
1
2
3
4
5
6
7
8
9
10
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"
]
}'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
"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"
}
}
}

Réponse réussie

Lister les exécutions en attente

/api/v1/queries/queue

État des exécutions : une par paire requête/IA. Permet de distinguer une requête encore en cours, un échec et une suspension faute de fonds, ce que le seul nombre de réponses ne permet pas.

Paramètres de requête

statusstring= queued,onHold,failed

Groupes de statuts séparés par des virgules. Les trois par défaut.

companyIdstring (uuid)

Limiter à une entreprise. Sinon, toutes les entreprises du compte.

queryIdstring (uuid)

Exécutions d’une requête

providerstring

Filtrer par IA

chatgptgeminiperplexitygrokdeepseekgigachatyandex_alicealice_chatgoogle_ai_mode
includeArchivedboolean= false

Inclure les exécutions des requêtes archivées

limitinteger= 50

Taille de page

offsetinteger= 0

Décalage

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
GET/api/v1/queries/queue
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/queries/queue" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
"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
}
}

Réponse réussie

Résumé de la file et coût estimé

/api/v1/queries/queue/summary

Compteurs d’exécutions, coût de la file actuelle et solde FoxCoin en une requête. Tant que queuedTotal > 0, l’exécution se poursuit. onHold > 0 indique un manque de fonds : ces exécutions ne reprendront pas automatiquement, même après rechargement.

Paramètres de requête

companyIdstring (uuid)

Limiter à une entreprise

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
GET/api/v1/queries/queue/summary
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/queries/queue/summary" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"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
}
}

Réponse réussie

Créer des requêtes en lot avec les modèles IA sélectionnés

/api/v1/queries/setup

Crée les groupes et les requêtes dans une transaction, puis les met immédiatement en file. providers permet de sélectionner les modèles IA ; si ce champ est omis, les paramètres du compte sont utilisés. Pour une seule requête, utilisez POST /api/v1/queries, qui accepte aussi providers. Payant : chaque réponse reçue de chaque modèle coûte des FoxCoin (voir GET /api/v1/billing/balance). Maximum 500 requêtes par appel.

Corps de la requête

companyIdstring

Si absent, utilise preferredCompanyId de la clé (voir GET /api/v1/context)

clusterIdstring

Groupe existant dont hériter les paramètres géographiques ; s’applique à tous les éléments de clusters sans clusterId propre

providersstring[]

Modèles IA à interroger (slugs de GET /api/v1/sources). Si ce champ est omis, les paramètres du compte sont utilisés ; un compte non configuré utilise ChatGPT. POST /api/v1/queries permet également la sélection via providers.

clustersobject[]obligatoire

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
402application/json

Solde FoxCoin insuffisant

HTTP_402
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/queries/setup
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
curl -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"
}
]
}
]
}'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"success": true,
"data": {
"clustersCreated": 1,
"queriesCreated": 1,
"providerRunsCreated": 1,
"dispatchError": "example_dispatchError",
"clusters": [
{
"id": "example_id",
"name": "example_name",
"slug": "example_slug",
"queryIds": [
"example"
]
}
]
}
}

Réponse réussie

Remettre des exécutions en file

/api/v1/queries/queue/resume

Reprend les exécutions suspendues. **Pourquoi.** Si le solde FoxCoin est insuffisant, l’exécution passe à ON_HOLD_NO_FUNDS. Les workers ne la prennent pas en charge et un rechargement ne la relance PAS. Elle attend jusqu’à ce que le planificateur la passe à CANCELLED après 45 jours. Cela peut donner l’impression d’avoir payé sans que les requêtes repartent. La reprise doit toujours être déclenchée explicitement avec cette méthode. **Comment cela se produit.** Créez des requêtes avec un solde insuffisant. Le contrôle a lieu à la mise en file puis à l’exécution : certaines exécutions peuvent donc être suspendues même si la requête a partiellement abouti. Vérifiez `GET /api/v1/queries/queue/summary` → `onHold` ou `queue.status` = `on_hold_no_funds`. **402 n’est pas un refus définitif :** le solde ne couvre pas tout le lot. Rechargez-le ou réessayez avec `force: true` : les exécutions couvertes seront traitées et les autres seront de nouveau suspendues.

Corps de la requête

runIdsstring[]

Cibler des ID d’exécution précis

scopestring

Toutes les exécutions suspendues

onHold
companyIdstring

Limiter scope à une entreprise

forceboolean= false

Reprendre même si le solde ne couvre pas tout le lot

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
402application/json

Solde FoxCoin insuffisant pour tout le lot

HTTP_402
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/queries/queue/resume
1
2
3
4
5
6
curl -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"
}'
1
2
3
4
5
6
{
"success": true,
"data": {
"resumed": 1
}
}

Réponse réussie

Retirer des exécutions de la file

/api/v1/queries/queue/cancel

Annule les exécutions qui n’ont pas encore démarré : en attente (PENDING, RETRYING) ou suspendues. Les exécutions RUNNING ne sont jamais modifiées : elles sont déjà traitées par un worker et leur annulation provoquerait une condition de concurrence. **Quand l’utiliser.** Pour arrêter un lot inutile avant qu’il ne consomme des FoxCoin : le débit intervient à la réception d’une réponse, donc une exécution annulée ne coûte rien. Ou pour supprimer une file bloquée que vous ne comptez pas financer. L’annulation est réversible : une exécution peut être remise en file via `POST /api/v1/queries/queue/resume` avec son `runId`.

Corps de la requête

runIdsstring[]
queryIdsstring[]

Toutes les exécutions annulables de ces requêtes

scopestring

onHold : suspensions uniquement ; queued : file active uniquement

onHoldqueued
companyIdstring

Limiter scope à une entreprise

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/queries/queue/cancel
1
2
3
4
5
6
7
curl -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"
}'
1
2
3
4
5
6
{
"success": true,
"data": {
"cancelled": 1
}
}

Réponse réussie

Génération de requêtes

Suggestions automatiques de requêtes : génération de brouillons et validation. La génération (1 FoxCoin par requête) et l’interrogation payante des IA (10 FoxCoin par réponse) sont deux étapes distinctes.

Générer des suggestions sans interroger les modèles IA

/api/v1/queries/autogenerate

Le service propose des requêtes et les enregistre comme BROUILLONS. Aucune IA n’est interrogée à cette étape. Remplace isAutoGenerationEnabled, qui lançait simultanément la génération et l’exécution payante sans permettre de les séparer. Ici, l’exécution démarre uniquement avec POST /api/v1/query-drafts/approve. Coût : 1 FoxCoin pour CHAQUE requête générée, débité selon les brouillons effectivement livrés. L’exécution est facturée séparément : 10 FoxCoin par réponse (requête × IA). Langue et pays : sans language/region, les paramètres régionaux de l’entreprise sont utilisés (regionTargets, PUT /api/v1/companies/{id}), puis ru/RU. Pour plusieurs pays, transmettez targets : une tâche par pays, avec sa langue officielle par défaut (AE → ar, IN → hi). Types : sans types, utilise Company.autogenQueryTypes, par défaut commercial, informational, comparative, reputational. Les comparaisons « X vs Y » sont générées uniquement si comparative figure dans la liste ET si l’entreprise a des concurrents. Par défaut, renvoie immédiatement 202 et génère en arrière-plan : consultez la progression par GET sur la même adresse avec clientToken. La forme courte (region/language/city/includeDistricts) et targets sont incompatibles : les utiliser ensemble renvoie 400, car hors de targets, une ville ne peut pas être associée à un pays précis.

Corps de la requête

companyIdstring

Si absent, utilise preferredCompanyId de la clé.

productIdstring
countintegerobligatoire

Nombre de requêtes à générer PAR cible. 1 FoxCoin par requête.

typesstring[]

Types de requêtes générées ; count est réparti à parts égales. Si absent, utilise Company.autogenQueryTypes, qui inclut comparative par défaut.

clustersstring[]

Sujets dans lesquels répartir les requêtes.

userWishesstring
namestring

Nom de la tâche, visible dans l’interface et dans GET.

languagestring

ISO 639-1. Si absent, langue de l’entreprise. Uniquement SANS targets.

regionstring

ISO 3166-1 alpha-2. Si absent, pays primary de l’entreprise (regionTargets), puis RU. Les anciens noms (« russia ») sont acceptés. Uniquement SANS targets.

citystring

Uniquement SANS targets.

includeDistrictsboolean

Uniquement SANS targets.

targetsobject[]

Mesure dans plusieurs pays : une tâche par pays. Coût égal à la somme des count de toutes les cibles. INCOMPATIBLE avec la forme courte : region / language / city / includeDistricts à côté de targets → 400. Dans targets, chaque pays possède sa propre ville et langue.

waitboolean= false

true attend la fin de la génération. Réservé aux petits lots : à partir de 100 requêtes, le traitement prend plusieurs minutes.

clientTokenstring

Votre marqueur de tâche, utilisé ensuite pour suivre sa progression.

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
402application/json

Solde FoxCoin insuffisant : champs required et balance dans le corps de l’erreur

HTTP_402
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
503application/json

La génération automatique n’est pas configurée sur le serveur

HTTP_503
POST/api/v1/queries/autogenerate
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
curl -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"
}
]
}'
1
2
3
4
{
"success": true,
"data": {}
}

Réponse réussie

État des tâches de génération de requêtes

/api/v1/queries/autogenerate

Progression des tâches lancées par POST /api/v1/queries/autogenerate. Interrogez jusqu’à status = OK, puis récupérez les brouillons via GET /api/v1/query-drafts. Les brouillons d’une tâche RUNNING ne peuvent volontairement pas être approuvés, pour éviter de valider un lot incomplet.

Paramètres de requête

runIdstring (uuid)

Tâche précise.

clientTokenstring

Tâche identifiée par le marqueur client renvoyé par POST.

limitinteger= 20

Nombre de tâches récentes à renvoyer.

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
GET/api/v1/queries/autogenerate
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/queries/autogenerate" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
"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"
}
]
}

Réponse réussie

Arrêter une tâche de génération

/api/v1/queries/autogenerate/cancel

L’annulation est effective : les lots non démarrés ne sont pas exécutés et seuls les brouillons déjà livrés sont facturés. L’exécution passe à CANCELLED ; les brouillons générés sont conservés et peuvent être approuvés.

Corps de la requête

runIdstringobligatoire

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/queries/autogenerate/cancel
1
2
3
4
5
6
curl -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"
}'
1
2
3
4
5
6
{
"success": true,
"data": {
"cancelled": true
}
}

Réponse réussie

Lister les brouillons de requêtes

/api/v1/query-drafts

Stocker un brouillon ne coûte rien et ne déclenche aucune interrogation. Il devient une requête uniquement via POST /api/v1/query-drafts/approve.

Paramètres de requête

statusstring

PENDING : en attente de décision. Tous les statuts par défaut.

PENDINGAPPROVEDREJECTEDEXPIRED
companyIdstring (uuid)

Filtrer par entreprise.

typestring

Filtrer par type de requête.

neutralcommercialinformationalcomparativereputationalbranded
pageinteger= 1

Numéro de page, à partir de 1.

limitinteger= 50

Taille de page.

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
GET/api/v1/query-drafts
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/query-drafts" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
"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": {}
}
}

Réponse réussie

Valider les brouillons et lancer les requêtes

/api/v1/query-drafts/approve

ÉTAPE PAYANTE : les brouillons approuvés deviennent des requêtes envoyées aux IA choisies, à 10 FoxCoin par réponse (requête × IA). 50 brouillons × 3 IA = 150 réponses = 1500 FoxCoin. Appelez d’abord avec dryRun: true et présentez l’estimation à l’utilisateur. Idempotent : un nouvel appel avec les mêmes draftIds ne crée pas de doublons et ne relance pas les requêtes. Les brouillons d’une tâche de génération encore en cours sont ignorés (skippedRunning) ; attendez status = OK.

Corps de la requête

draftIdsstring[]obligatoire
providersstring[]obligatoire

IA à interroger. Chaque IA multiplie le coût.

dryRunboolean

true renvoie uniquement l’estimation, sans création ni débit.

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
402application/json

Solde FoxCoin insuffisant : champs required et balance dans le corps de l’erreur

HTTP_402
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/query-drafts/approve
1
2
3
4
5
6
7
8
9
10
11
12
13
14
curl -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
}'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"success": true,
"data": {
"dryRun": true,
"toApprove": 1,
"estimatedAnswersCostFc": 1,
"approved": 1,
"createdQueries": 1,
"skippedDuplicates": 1,
"skippedRunning": 1,
"dispatch": {},
"balance": 1
}
}

Réponse réussie

Rejeter les brouillons

/api/v1/query-drafts/reject

Rejet logique : le brouillon reste en base avec le statut REJECTED pour l’audit de facturation. Aucune IA n’est interrogée. Les FoxCoin de génération ne sont pas remboursés, car les requêtes ont déjà été générées.

Corps de la requête

draftIdsstring[]obligatoire

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/query-drafts/reject
1
2
3
4
5
6
7
8
curl -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"
]
}'
1
2
3
4
5
6
{
"success": true,
"data": {
"rejected": 1
}
}

Réponse réussie

Réponses des IA

Réponses des IA par lot : liens, mentions et sentiment.

Récupérer les réponses IA en lot

/api/v1/answers

Remplace une boucle GET /api/v1/queries/{id} pour chaque requête : une page contient jusqu’à 200 réponses avec liens, mentions et sentiment. links contient les citations analysées de N’IMPORTE QUELLE IA. À distinguer du champ brut answer.sources, qui contient les données du scraper, n’est renseigné que pour « Recherche avec Alice » et ne constitue pas une liste de citations. brandDomainCited indique si le domaine du site de l’entreprise est cité dans la réponse. Champs de mention : position est le DÉCALAGE EN CARACTÈRES dans le texte de la réponse. Le tableau est trié sur cette valeur ; l’ordre de citation de la marque correspond donc au RANG de la mention dans le tableau, pas à position. sentiment (1 / 0 / -1) et sentimentScore (-1..1) décrivent la réponse ENTIÈRE et sont identiques pour toutes ses mentions. sentimentScore = null si le sentiment n’a pas encore été calculé. isOurs = false désigne un concurrent. Les paramètres de tableau sont répétés : ?companyId=a&companyId=b.

Paramètres de requête

companyIdstring[]

Entreprises, plusieurs valeurs acceptées.

productIdstring[]

Produits, plusieurs valeurs acceptées.

queryIdstring[]

Uniquement les réponses à ces requêtes.

sourceIdstring[]

IA par id (GET /api/v1/sources).

providerstring[]

IA par slug.

typestring[]

Type de requête auquel appartient la réponse.

labelstring[]

Slugs des groupes.

regionstring[]

Région de la requête, ISO 3166-1 alpha-2. Les anciens noms sont également reconnus.

languagestring[]

Langue de la requête.

createdAtFromstring (date-time)

Date de création de la RÉPONSE, borne de début (ISO 8601).

createdAtTostring (date-time)

Date de création de la RÉPONSE, borne de fin (ISO 8601).

hasLinksboolean

true : réponses avec liens uniquement ; false : réponses sans liens uniquement.

mentionsOursboolean

true : uniquement les réponses mentionnant la marque de l’entreprise.

showArchivedboolean= false

true : inclure les réponses des requêtes archivées.

includestring= content,tonality

Éléments à inclure, séparés par des virgules : content, links, mentions, tonality.

limitinteger= 50

Taille de page.

offsetinteger= 0

Décalage.

sortBystring= createdAt

Champ de tri.

createdAtdate
sortOrderstring= desc

Sens du tri.

ascdesc

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
GET/api/v1/answers
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/answers" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
{
"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"
}
]
}
]
}

Réponse réussie

Géographie

Répertoires des pays, régions, villes et langues.

Lister les pays

/api/v1/geo/countries

Les id du répertoire servent à regionTargets et defaultLanguageId des entreprises et groupes ; iso2 sert au champ region des requêtes et de la génération automatique.

Paramètres de requête

qstring

Recherche par nom.

continentstring

Filtrer par continent.

EUROPEASIANORTH_AMERICASOUTH_AMERICAAFRICAOCEANIAANTARCTICA
limitinteger= 250

Nombre maximal d’enregistrements.

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
GET/api/v1/geo/countries
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/geo/countries" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"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
}
}

Réponse réussie

Lister les régions d’un pays

/api/v1/geo/regions

Régions (provinces, États) d’un pays. countryId ou countryIso2 est obligatoire.

Paramètres de requête

countryIso2string

Code pays à deux lettres.

countryIdstring (uuid)

UUID du pays.

qstring

Recherche par nom.

limitinteger= 100

Nombre maximal d’enregistrements.

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
GET/api/v1/geo/regions
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/geo/regions" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
{
"success": true,
"data": {}
}

Réponse réussie

Lister les villes d’un pays

/api/v1/geo/cities

Villes d’un pays. countryId ou countryIso2 est obligatoire. cityId est utilisé dans regionTargets des entreprises et targets des groupes.

Paramètres de requête

countryIso2string

Code pays à deux lettres.

countryIdstring (uuid)

UUID du pays.

regionIdstring (uuid)

UUID de la région.

qstring

Recherche par nom.

limitinteger= 50

Nombre maximal d’enregistrements.

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
GET/api/v1/geo/cities
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/geo/cities" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
{
"success": true,
"data": {}
}

Réponse réussie

Lister les langues

/api/v1/geo/languages

Les id du répertoire servent à regionTargets et defaultLanguageId des entreprises et groupes ; iso2 sert au champ region des requêtes et de la génération automatique.

Paramètres de requête

qstring

Recherche par nom ou code.

limitinteger= 200

Nombre maximal d’enregistrements.

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
GET/api/v1/geo/languages
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/geo/languages" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"success": true,
"data": {
"data": [
{
"id": "example_id",
"iso639_1": "example_iso639_1",
"nameNative": "example_nameNative",
"nameEn": "example_nameEn"
}
],
"total": 1
}
}

Réponse réussie

Clusters de requêtes

Étiquettes/groupes de requêtes : liste filtrable par entreprise et création avec paramètres régionaux

Lister les groupes de requêtes

/api/v1/query-labels

Renvoie les étiquettes/groupes de requêtes du workspace actuel avec leur nombre de requêtes. companyId limite les résultats aux groupes contenant des requêtes de cette entreprise ; queryCount ne compte que ses requêtes. lite=true renvoie la forme allégée { items: [{ id, name, slug, queryCount }] }, sans statistiques ni sampleQueries.

Paramètres de requête

companyIdstring (uuid)

Filtre par entreprise : uniquement les groupes contenant ses requêtes ; queryCount compte ses requêtes.

litestring

lite=true renvoie la forme allégée { items: [{ id, name, slug, queryCount }] }, sans statistiques.

truefalse
offsetinteger= 0

Décalage de pagination

limitinteger= 20

Nombre d’enregistrements par page

qstring

Sous-chaîne du nom de l’étiquette, sans distinction de casse.

sortstring= queryCount:desc

Tri au format field:direction.

queryCount:descqueryCount:ascname:ascname:desccreatedAt:desccreatedAt:asclastUsedAt:desclastUsedAt:asc
hasQueriesstring

with : groupes contenant des requêtes ; without : groupes vides.

withwithout
minCountinteger

Nombre minimal de requêtes dans le groupe.

maxCountinteger

Nombre maximal de requêtes dans le groupe.

createdFromstring (date-time)

Étiquettes créées à partir de la date indiquée.

createdTostring (date-time)

Étiquettes créées au plus tard à la date indiquée.

lastUsedFromstring (date-time)

Étiquettes dont lastUsedAt est égal ou postérieur à la date indiquée.

lastUsedTostring (date-time)

Étiquettes dont lastUsedAt est égal ou antérieur à la date indiquée.

includestring

include=targets ajoute les cibles géographiques du groupe (country/city).

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/query-labels
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/query-labels" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
"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": {}
}
}

Réponse réussie

Créer ou modifier un groupe régional de requêtes

/api/v1/query-labels

Recherche ou crée selon (slug, userId). Un groupe avec ce slug est mis à jour (nom et paramètres géographiques) et ses targets sont recréées. companyId/productId sont facultatifs et acceptés, mais ne sont pas encore persistés sur QueryLabel.

Corps de la requête

namestringobligatoire
slugstring
descriptionstring
companyIdstring
productIdstring
defaultLanguageIdstring
defaultLocalestring
defaultResponseLanguageIdstring
geoScopestring
GLOBALCOUNTRYREGIONCITY
injectLocationModestring
NONEAPPEND_PARENSAPPEND_NATURALPREPENDAI_REWRITE
autogenStrategystring
SHAREDPER_TARGETPER_TARGET_LOCALIZED
targetsobject[]

Réponses

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
409application/json

Conflit : la ressource existe déjà

CONFLICT
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/query-labels
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
curl -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
}'
1
2
3
4
5
6
7
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Erreur de validation des données d’entrée"
}
}

Erreur de validation des données d’entrée

Mentions

Consultation des mentions de marque

Lister les mentions

/api/v1/mentions

Renvoie les mentions de marque dans les réponses des assistants IA avec leur contexte complet.

Paramètres de requête

offsetinteger= 0

Décalage de pagination

limitinteger= 20

Nombre d’enregistrements par page

sortBystring= createdAt
createdAtpositionsentiment
sortOrderstring= desc

Ordre de tri

ascdesc
timeRangestring

Période

24h7d30d90dall
createdAtFromstring (date-time)

Début de la plage des dates de création (ISO 8601)

createdAtTostring (date-time)

Fin de la plage des dates de création (ISO 8601)

companyIdstring (uuid)

Filtrer par entreprise

productIdstring (uuid)

Filtrer par produit

competitorIdstring (uuid)

Filtrer par concurrent

answerIdstring (uuid)

Filtrer par réponse précise

typestring

Type de mention

companyproductkeywordcompetitor
sentimentstring

Sentiment

positiveneutralnegative
searchstring

Texte de recherche, sans distinction de casse

isOursstring

Uniquement notre marque (true) ou les concurrents (false)

truefalse

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/mentions
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/mentions" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
{
"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
}
}

Réponse réussie

Analytique

Analyses : concurrents, sentiment, liens et visibilité de la marque

Analytique des concurrents

/api/v1/analytics/competitors

Analyse comparative complète de votre entreprise et de ses concurrents selon les mentions dans les assistants IA. Filtres par groupes (slug), fournisseurs IA et période.

Paramètres de requête

timeRangestring= 30d

Période

24h7d30dall
fromstring (date-time)

Début de la période personnalisée (ISO 8601)

tostring (date-time)

Fin de la période personnalisée (ISO 8601)

companyIdstring (uuid)

ID de l’entreprise

productIdstring (uuid)

ID du produit

sourceIdstring[]

ID des fournisseurs IA

labelIdstring[]

ID des groupes/étiquettes

labelSlugstring

Slug du groupe. Tableau : ?labelSlug=slug1&labelSlug=slug2

labelFilterModestring= or

Mode de filtrage des étiquettes

orand
includeDemostring

Inclure les données de démonstration

truefalse

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/analytics/competitors
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/analytics/competitors" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
{
"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
}
]
}
}

Réponse réussie

Aperçu des mentions

/api/v1/analytics/competitors/preview

Renvoie les réponses précises des assistants IA avec les mentions pour une analyse détaillée. Filtres par groupes, données de démonstration, période personnalisée et logique de filtrage des étiquettes. companyId est obligatoire : sans lui, les données de toutes les entreprises du compte seraient regroupées. S’il est absent, preferredCompanyId de la clé est utilisé (voir GET /api/v1/context).

Paramètres de requête

sidestringobligatoire

Partie concernée : notre entreprise ou un concurrent

ourcompetitor
competitorNamestring

Nom du concurrent (si side=competitor)

mentionTypestring= both

Type de mention

brandlinkboth
offsetinteger= 0

Décalage de pagination

limitinteger= 20

Nombre d’enregistrements par page

timeRangestring
24h7d30dall
companyIdstring (uuid)
productIdstring (uuid)
sourceIdstring[]
labelIdstring[]
includeMentionsstring

Inclure les mentions dans la réponse

truefalse
includeDemostring

Inclure les données de démonstration

truefalse
labelFilterModestring= or

Logique de filtrage par groupes

orand
fromstring (date-time)

Début de la période (ISO 8601)

tostring (date-time)

Fin de la période (ISO 8601)

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/analytics/competitors/preview
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/analytics/competitors/preview" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
{
"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
}
}

Réponse réussie

Analytique de tonalité

/api/v1/analytics/tonality

Analyse complète du sentiment des réponses des assistants IA : indicateurs de qualité, évolution temporelle, réponses problématiques et meilleures réponses.

Paramètres de requête

timeRangestring= 30d
24h7d30d90d
companyIdstring (uuid)
productIdstring (uuid)
queryTypestring

Type de requête

neutralcomparativenegative
sentimentstring

Filtrer par sentiment

positiveneutralnegative
sourceIdstring[]

Fournisseurs IA

labelSlugstring[]

Groupes/étiquettes par slug

labelFilterModestring= or
orand
fromstring (date-time)
tostring (date-time)
includeDemostring
truefalse

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/analytics/tonality
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/analytics/tonality" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
{
"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": []
}
}
}

Réponse réussie

Visibilité de la marque

/api/v1/analytics/brand-visibility

Évolution de la visibilité de la marque par rapport aux concurrents, avec granularité réglable. Filtres par groupes (ID et slug), fournisseurs IA et logique de filtrage.

Paramètres de requête

granularitystring= day

Granularité de l’axe temporel

dayweekmonth
timeRangestring
24h7d30dall
companyIdstring (uuid)
productIdstring (uuid)
includeDemostring
truefalse
fromstring (date-time)
tostring (date-time)
labelIdstring

ID du groupe. Tableau : ?labelId=id1&labelId=id2

labelSlugstring

Slug du groupe

labelFilterModestring= or

Logique de filtrage

orand
sourceIdstring

ID de la source IA

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/analytics/brand-visibility
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/analytics/brand-visibility" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"success": true,
"data": {
"timeline": [
{
"period": "2026-04-01",
"periodLabel": "1 апр",
"our": 15,
"competitors": {
"Apple": 18,
"Google": 12
}
}
],
"summary": {
"trend": "growing"
}
}
}

Réponse réussie

Entreprises et produits pour les filtres

/api/v1/analytics/companies-products

Entreprises du compte et leurs produits, pour le sélecteur « entreprise → produit ». companyId n’est PAS obligatoire ici : sans lui, toutes les entreprises sont renvoyées, conformément à l’objectif de cette méthode.

Paramètres de requête

companyIdstring (uuid)

Limiter à une entreprise

includeDemoboolean

Inclure les données de démonstration

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/analytics/companies-products
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/analytics/companies-products" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
{
"success": true
}

Réponse réussie

Publicité

Données publicitaires issues des réponses des IA

Données publicitaires

/api/v1/advertising

Analyse des blocs publicitaires et promotionnels dans les réponses des assistants IA. Pagination, recherche par domaine/URL, filtres par groupes, type de promotion, période et tri. companyId est obligatoire : sans lui, les données de toutes les entreprises du compte seraient regroupées. S’il est absent, preferredCompanyId de la clé est utilisé (voir GET /api/v1/context).

Paramètres de requête

timeRangestring
24h7d30dall
companyIdstring (uuid)
productIdstring (uuid)
includeDemostring
truefalse
pageinteger= 1

Numéro de page

pageSizeinteger= 50

Taille de page

searchstring

Recherche par domaine ou URL

searchFieldstring

Champ de recherche

domainurltitle
labelstring

Slug du groupe. Tableau : ?label=slug1&label=slug2

promoTypestring

Type de bloc promotionnel

sortBystring

Champ de tri

sortDirstring

Sens du tri

ascdesc
fromstring (date-time)

Début de la période (ISO 8601)

tostring (date-time)

Fin de la période (ISO 8601)

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/advertising
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/advertising" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
"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
}
]
}
}

Réponse réussie

Aperçu des blocs publicitaires

/api/v1/advertising/preview

Détail de la synthèse /api/v1/advertising : promotions affichées et réponses concernées.

Paramètres de requête

domainstringobligatoire

Domaine de la promotion. OBLIGATOIRE, sinon erreur 400

companyIdstring (uuid)

Entreprise. Si absente, preferredCompanyId de la clé est utilisé

productIdstring

Produit

promoTypestring

ours | competitor | other

ourscompetitorother
timeRangestring

24h | 7d | 30d | 90d | all

labelstring[]

Groupes

labelFilterModestring

AND | OR

limitinteger= 20

1..50

offsetinteger= 0

Décalage

includeDemoboolean

Inclure les données de démonstration

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
GET/api/v1/advertising/preview
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/advertising/preview" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
{
"success": true
}

Réponse réussie

Fabrique de contenu

Fabrique de contenu : tâches, étiquettes, enrichissement, génération de plans et d’articles, détection d’insights

Lister les tâches

/api/v1/factory/tasks

Renvoie les tâches de la fabrique de contenu avec filtres, pagination et tri.

Paramètres de requête

companyIdstring (uuid)

Filtrer par entreprise

statusstring[]

Filtrer par statut ; plusieurs valeurs acceptées : ?status=TODO&status=IN_PROGRESS

typestring[]

Filtrer par type de tâche ; plusieurs valeurs acceptées

prioritystring[]

Filtrer par priorité ; plusieurs valeurs acceptées

searchstring

Recherche dans le titre et la description de la tâche

tagIdstring (uuid)

Filtrer par étiquette

aiGeneratedboolean

Filtre : uniquement les tâches générées par IA

sortBystring= createdAt
createdAtupdatedAtprioritystatusposition
sortOrderstring= desc

Ordre de tri

ascdesc
offsetinteger= 0

Décalage de pagination

limitinteger= 20

Nombre d’enregistrements par page

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/factory/tasks
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/factory/tasks" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
{
"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
}
}

Réponse réussie

Créer une tâche

/api/v1/factory/tasks

Crée une tâche dans la fabrique de contenu.

Corps de la requête

titlestringobligatoire

Titre de la tâche

companyIdstringobligatoire

ID de l’entreprise

typestringobligatoire

Type de tâche

NEW_ARTICLEOPTIMIZE_PAGECREATE_FAQCOMPARISONGUIDECASE_STUDY
prioritystring= MEDIUM

Priorité

CRITICALHIGHMEDIUMLOW
descriptionstring

Description de la tâche

targetKeywordsstring[]

Mots-clés cibles (20 maximum)

targetProvidersstring[]

Fournisseurs IA cibles

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/factory/tasks
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
curl -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"
]
}'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
{
"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"
}
}

Réponse réussie

Obtenir la tâche

/api/v1/factory/tasks/{id}

Renvoie les informations complètes sur une tâche de la fabrique de contenu.

Paramètres de requête

idstring (uuid)obligatoire

ID de la tâche

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
GET/api/v1/factory/tasks/{id}
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/factory/tasks/{id}" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
{
"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"
}
}

Réponse réussie

Mettre à jour la tâche

/api/v1/factory/tasks/{id}

Met à jour partiellement une tâche de la fabrique de contenu.

Paramètres de requête

idstring (uuid)obligatoire

ID de la tâche

Corps de la requête

statusstring
IDEABACKLOGTODOIN_PROGRESSREVIEWDONEDISMISSED
prioritystring
CRITICALHIGHMEDIUMLOW
titlestring
descriptionstring
tagIdsstring[]

Tableau des ID d’étiquettes à associer

targetKeywordsstring[]
targetProvidersstring[]
dueDatestring

Échéance de la tâche

metadataobject

Métadonnées libres de la tâche

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
PATCH/api/v1/factory/tasks/{id}
1
2
3
4
5
6
7
8
9
10
11
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"
]
}'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
{
"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"
}
}

Réponse réussie

Archiver la tâche

/api/v1/factory/tasks/{id}

Archive la tâche. Les données sont conservées, mais son statut devient DISMISSED.

Paramètres de requête

idstring (uuid)obligatoire

ID de la tâche

Réponses

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
DELETE/api/v1/factory/tasks/{id}
1
2
3
curl -X DELETE "https://app.brandfound.ai/api/v1/factory/tasks/{id}" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
// No Content

Suppression réussie

Enrichir la tâche

/api/v1/factory/tasks/{id}/enrich

Recherche RAG dans la base de sources, analyse des concurrents et recommandations IA.

Paramètres de requête

idstring (uuid)obligatoire

ID de la tâche

Corps de la requête

topicstringobligatoire

Sujet à enrichir

descriptionstring

Description complémentaire

keywordsstring[]

Mots-clés de la recherche RAG

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/factory/tasks/{id}/enrich
1
2
3
4
5
6
7
8
9
10
11
12
curl -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",
"характеристики"
]
}'
1
2
3
4
{
"success": true,
"data": {}
}

Réponse réussie

Générer un plan

/api/v1/factory/tasks/{id}/plan

Génère un plan d’article à partir des données enrichies : structure, titres, idées principales et ton.

Paramètres de requête

idstring (uuid)obligatoire

ID de la tâche

Corps de la requête

promptstring

Instructions complémentaires pour générer le plan

topicIdstring

ID du sujet sélectionné parmi les suggestions

topicTitlestring

Titre du sujet

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/factory/tasks/{id}/plan
1
2
3
4
5
6
7
8
curl -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: полное сравнение"
}'
1
2
3
4
5
6
7
8
9
10
{
"success": true,
"data": {
"plan": {},
"usage": {
"inputTokens": 1,
"outputTokens": 1
}
}
}

Réponse réussie

Générer un article

/api/v1/factory/tasks/{id}/article

Génère un article à partir d’un plan, avec streaming SSE. Content-Type: text/event-stream.

Paramètres de requête

idstring (uuid)obligatoire

ID de la tâche

Corps de la requête

planIdstring

ID du plan utilisé pour générer l’article

articleLengthstring= medium

Longueur de l’article : short (~1000 mots), medium (~2000), long (~3500)

shortmediumlong

Réponses

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/factory/tasks/{id}/article
1
2
3
4
5
6
7
curl -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"
}'
1
2
3
4
5
6
7
{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Non authentifié : jeton absent ou invalide"
}
}

Non authentifié : jeton absent ou invalide

Versions de contenu

/api/v1/factory/tasks/{id}/versions

Renvoie les versions de contenu de la tâche : plans, articles et briefs.

Paramètres de requête

idstring (uuid)obligatoire

ID de la tâche

typestring

Filtrer par type de contenu

planarticlebrief
planIdstring

Filtrer par ID du plan

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
GET/api/v1/factory/tasks/{id}/versions
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/factory/tasks/{id}/versions" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
{
"success": true,
"data": [
{
"id": "example_id",
"type": "plan",
"version": 1,
"content": {},
"createdAt": "2026-01-15T12:00:00Z"
}
]
}

Réponse réussie

Analytique de la tâche

/api/v1/factory/tasks/{id}/analytics

Renvoie les analyses de la tâche : statistiques d’enrichissement, de génération et de publication.

Paramètres de requête

idstring (uuid)obligatoire

ID de la tâche

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
GET/api/v1/factory/tasks/{id}/analytics
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/factory/tasks/{id}/analytics" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
{
"success": true,
"data": {}
}

Réponse réussie

Suggérer des sujets

/api/v1/factory/tasks/{id}/topics

Génère 10 sujets à partir des données de la tâche.

Paramètres de requête

idstring (uuid)obligatoire

ID de la tâche

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/factory/tasks/{id}/topics
1
2
3
curl -X POST "https://app.brandfound.ai/api/v1/factory/tasks/{id}/topics" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"success": true,
"data": [
{
"id": "example_id",
"title": "example_title",
"description": "example_description",
"keywords": [
"example"
],
"score": 1
}
]
}

Réponse réussie

Lister les tags

/api/v1/factory/tags

Renvoie toutes les étiquettes de la fabrique de contenu avec leur nombre de tâches.

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/factory/tags
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/factory/tags" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
"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
}
]
}

Réponse réussie

Créer un tag

/api/v1/factory/tags

Crée une étiquette pour les tâches de la fabrique de contenu.

Corps de la requête

namestringobligatoire

Nom de l’étiquette

colorstring

Couleur HEX, par exemple #6366f1

iconstring

Icône de l’étiquette, facultative

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
409application/json

Conflit : la ressource existe déjà

CONFLICT
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/factory/tags
1
2
3
4
5
6
7
8
curl -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"
}'
1
2
3
4
5
6
7
8
9
10
11
12
{
"success": true,
"data": {
"id": "example_id",
"name": "example_name",
"color": "example_color",
"icon": "example_icon",
"isSystem": true,
"position": 1,
"taskCount": 1
}
}

Réponse réussie

Mettre à jour le tag

/api/v1/factory/tags/{id}

Met à jour partiellement une étiquette de la fabrique de contenu.

Paramètres de requête

idstring (uuid)obligatoire

ID de l’étiquette

Corps de la requête

namestring
colorstring
iconstring
positioninteger

Position de tri

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
409application/json

Conflit : la ressource existe déjà

CONFLICT
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
PATCH/api/v1/factory/tags/{id}
1
2
3
4
5
6
7
8
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
}'
1
2
3
4
5
6
7
8
9
10
11
12
{
"success": true,
"data": {
"id": "example_id",
"name": "example_name",
"color": "example_color",
"icon": "example_icon",
"isSystem": true,
"position": 1,
"taskCount": 1
}
}

Réponse réussie

Supprimer le tag

/api/v1/factory/tags/{id}

Supprime une étiquette. Les étiquettes système ne peuvent pas être supprimées.

Paramètres de requête

idstring (uuid)obligatoire

ID de l’étiquette

Réponses

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
403application/json

Accès interdit

FORBIDDEN
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
DELETE/api/v1/factory/tags/{id}
1
2
3
curl -X DELETE "https://app.brandfound.ai/api/v1/factory/tags/{id}" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
// No Content

Suppression réussie

Lister les publications

/api/v1/factory/publications

Renvoie la liste paginée des publications de la fabrique de contenu.

Paramètres de requête

companyIdstring (uuid)

Filtrer par entreprise

offsetinteger= 0

Décalage de pagination

limitinteger= 20

Nombre d’enregistrements par page

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/factory/publications
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/factory/publications" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
"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
}
}

Réponse réussie

Détecter les insights

/api/v1/factory/insights

Lance les détecteurs (15 types) : lacunes de contenu, succès des concurrents, opportunités inexploitées, risques de réputation, etc.

Corps de la requête

companyIdstringobligatoire

ID de l’entreprise

insightTypestring

Type d’insight ; s’il est absent, tous les détecteurs sont lancés

CONTENT_GAPCOMPETITOR_WINWHITE_SPACEREPUTATION_RISKKEYWORD_OPPORTUNITYTRENDING_TOPICPROVIDER_BIASSEASONAL_OPPORTUNITYFAQ_OPPORTUNITYCOMPARISON_OPPORTUNITYGUIDE_OPPORTUNITYCASE_STUDY_OPPORTUNITYOPTIMIZATION_NEEDEDAUTHORITY_BUILDING
limitinteger

Nombre maximal d’insights

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/factory/insights
1
2
3
4
5
6
7
8
curl -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
}'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"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
}
}
}

Réponse réussie

Paramètres Factory

/api/v1/factory/settings

Renvoie les paramètres actuels de la fabrique de contenu de l’utilisateur.

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/factory/settings
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/factory/settings" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
{
"success": true,
"data": {}
}

Réponse réussie

Mettre à jour les paramètres

/api/v1/factory/settings

Met à jour les paramètres de la fabrique de contenu par fusion récursive (deep merge).

Corps de la requête

settingsobjectobligatoire

Paramètres à fusionner récursivement avec les paramètres actuels

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
PATCH/api/v1/factory/settings
1
2
3
4
5
6
7
8
9
10
11
12
13
curl -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"
]
}
}'
1
2
3
4
{
"success": true,
"data": {}
}

Réponse réussie

Obtenir la fiche de marque

/api/v1/factory/brand-card

Lit la fiche de marque, arborescence de documents Markdown de l’entreprise contenant les connaissances utilisées pour générer le contenu. Trois modes : sans paramètre supplémentaire, toute la fiche en un document Markdown (manifeste → fichiers core → fichiers liés → autres ; blocs privés ```private retirés ; limite d’environ 12 000 caractères) ; mode=index renvoie le manifeste et les fichiers avec path, id, isCore et liens sortants ; path=... renvoie un fichier : content, avec les liens [Nom](brandcard://id) conservés tels quels, et links avec le chemin résolu de chaque lien.

Paramètres de requête

companyIdstring (uuid)obligatoire

ID de l’entreprise

modestring

index renvoie le manifeste et la liste des fichiers au lieu de la fiche complète

index
pathstring

Chemin du fichier tel qu’il apparaît dans l’index, par exemple "main / settings.md", pour renvoyer un fichier. Insensible à la casse

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
GET/api/v1/factory/brand-card
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/factory/brand-card" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
{
"success": true,
"data": {}
}

Réponse réussie

Créer ou modifier un fichier de la fiche de marque

/api/v1/factory/brand-card

Crée ou remplace entièrement un fichier de la fiche de marque à partir de son chemin. Les dossiers manquants sont créés et l’extension .md est ajoutée si elle manque. Pour référencer un autre fichier, insérez un lien Markdown [Nom](brandcard://<id de l’index>) : il repose sur l’id, résiste aux renommages/déplacements et augmente la priorité du fichier cible lors de la génération. Conservez tels quels les liens brandcard:// existants lors des modifications. Placez les notes personnelles et options dans un bloc ```private : elles ne seront pas envoyées aux IA.

Corps de la requête

companyIdstringobligatoire

ID de l’entreprise

pathstringobligatoire

Chemin du fichier, segments séparés par "/", par exemple "products / pricing.md"

contentstringobligatoire

Markdown complet du fichier ; remplace son contenu actuel

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/factory/brand-card
1
2
3
4
5
6
7
8
curl -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…)"
}'
1
2
3
4
5
6
7
{
"success": true,
"data": {
"path": "example_path",
"created": true
}
}

Réponse réussie

Supprimer un fichier ou dossier de la fiche de marque

/api/v1/factory/brand-card

Supprime un fichier ou un dossier de la fiche de marque par son chemin ; un dossier et tout son contenu sont supprimés en cascade. Les fichiers structurels instruction.md, README.md et core ne peuvent pas être supprimés : modifiez-les via POST. Les liens vers un fichier supprimé deviennent orphelins : ils disparaissent de links dans l’index et sont renvoyés avec path=null à la lecture d’un fichier.

Paramètres de requête

companyIdstring (uuid)obligatoire

ID de l’entreprise

pathstringobligatoire

Chemin du fichier ou dossier, tel que dans l’index

Réponses

204

Suppression réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
DELETE/api/v1/factory/brand-card
1
2
3
curl -X DELETE "https://app.brandfound.ai/api/v1/factory/brand-card" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
{
"success": true,
"data": {
"deleted": true,
"path": "example_path"
}
}

Réponse réussie

Solde et dépenses

Solde FoxCoin et historique des opérations

Solde FoxCoin et tarifs

/api/v1/billing/balance

Solde, mouvements et tarifs des opérations. Le portefeuille est partagé au niveau du compte : les membres de l’équipe utilisent le solde du propriétaire. Les tarifs sont fournis ici pour éviter de les coder en dur dans l’intégration.

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/billing/balance
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/billing/balance" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"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
}
}
}

Réponse réussie

Historique des transactions

/api/v1/billing/transactions

Historique des opérations du portefeuille. Pour les débits liés aux réponses, query identifie la requête facturée.

Paramètres de requête

typestring

Filtrer par type d’opération

ANSWER_CHARGEQUERY_GENERATIONBRAND_CARD_GENERATIONTASK_ENRICHMENTARTICLE_GENERATIONCONTENT_PLANTOPIC_SUGGESTIONFACT_CHECKTOPUPBONUSREFUNDMANUAL_ADJUSTMENTSUBSCRIPTION_CREDITAPI_CALL_FREE
fromstring (date-time)

Début de la période, date ISO incluse

tostring (date-time)

Fin de la période, date ISO incluse

limitinteger= 50

Taille de page

offsetinteger= 0

Décalage

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/billing/transactions
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/billing/transactions" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
"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
}
}

Réponse réussie

Référentiels

Répertoires et contexte de la clé

Lister les modèles IA

/api/v1/sources

Assistants disponibles pour les exécutions et assistants utilisés par défaut. value correspond à la valeur acceptée par providers dans POST /api/v1/queries/setup. Les noms absents de cette liste sont ignorés silencieusement lors de la mise en file.

Paramètres de requête

includeUnpollableboolean= false

Ajouter claude, file historique non interrogée dans ce système

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/sources
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/sources" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
{
"success": true,
"data": [
{
"value": "chatgpt",
"label": "example_label",
"pollable": true,
"defaultForAccount": true
}
]
}

Réponse réussie

Obtenir le contexte de la clé API

/api/v1/context

Point de départ conseillé pour l’intégration : compte de la clé, droits, entreprises et produits accessibles, et entreprise utilisée par défaut.

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/context
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/context" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
{
"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"
}
]
}
}

Réponse réussie

Trafic IA

Visites du site depuis les réponses des IA (Yandex Metrica)

Trafic IA

/api/v1/analytics/metrika/ai-traffic

Visites du site depuis les réponses des IA : nombre de visites par IA et évolution. Périmètre du compte : tout integrationId externe est ignoré. Un résultat vide signifie généralement que Metrica n’est pas connecté ; vérifiez /api/v1/integrations/metrika/status.

Paramètres de requête

integrationIdstring (uuid)

Compteur Metrica. Sinon, tous les compteurs connectés au compte

timeRangestring

24h | 7d | 30d | 90d | all

fromstring

Début de la période, date ISO

tostring

Fin de la période, date ISO

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/analytics/metrika/ai-traffic
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/analytics/metrika/ai-traffic" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
{
"success": true
}

Réponse réussie

Visiteurs issus des modèles IA

/api/v1/analytics/metrika/visitors

Visites issues des IA et comportement sur le site : profondeur de navigation, objectifs et visites répétées. Périmètre du compte : tout integrationId externe est ignoré. Un résultat vide signifie généralement que Metrica n’est pas connecté ; vérifiez /api/v1/integrations/metrika/status.

Paramètres de requête

integrationIdstring (uuid)

Compteur Metrica. Sinon, tous les compteurs connectés au compte

timeRangestring

24h | 7d | 30d | 90d | all

fromstring

Début de la période, date ISO

tostring

Fin de la période, date ISO

hasGoalsboolean

Uniquement les visites ayant atteint des objectifs

includeSyntheticboolean

Inclure le trafic synthétique

pvMininteger

Nombre minimal de pages vues

pvMaxinteger

Nombre maximal de pages vues

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/analytics/metrika/visitors
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/analytics/metrika/visitors" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
{
"success": true
}

Réponse réussie

Entonnoir du trafic IA

/api/v1/analytics/metrika/traffic-funnel

Parcours entre une visite issue d’une réponse IA et l’action cible. Périmètre du compte : tout integrationId externe est ignoré. Un résultat vide signifie généralement que Metrica n’est pas connecté ; vérifiez /api/v1/integrations/metrika/status.

Paramètres de requête

integrationIdstring (uuid)

Compteur Metrica. Sinon, tous les compteurs connectés au compte

timeRangestring

24h | 7d | 30d | 90d | all

fromstring

Début de la période, date ISO

tostring

Fin de la période, date ISO

hasGoalsboolean

Uniquement les visites ayant atteint des objectifs

includeSyntheticboolean

Inclure le trafic synthétique

pvMininteger

Nombre minimal de pages vues

pvMaxinteger

Nombre maximal de pages vues

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/analytics/metrika/traffic-funnel
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/analytics/metrika/traffic-funnel" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
{
"success": true
}

Réponse réussie

Corrélation entre mentions et trafic

/api/v1/analytics/metrika/correlation

Compare l’évolution des mentions de marque aux visites réelles pour déterminer si une meilleure visibilité apporte davantage de trafic. Périmètre du compte : tout integrationId externe est ignoré. Un résultat vide signifie généralement que Metrica n’est pas connecté ; vérifiez /api/v1/integrations/metrika/status.

Paramètres de requête

companyIdstring (uuid)

Entreprise. Si absente, preferredCompanyId de la clé est utilisé

integrationIdstring (uuid)

Compteur Metrica. Sinon, tous les compteurs connectés au compte

timeRangestring

24h | 7d | 30d | 90d | all

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/analytics/metrika/correlation
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/analytics/metrika/correlation" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
{
"success": true
}

Réponse réussie

Objectifs Metrika

/api/v1/analytics/metrika/goals

Répertoire des objectifs du compteur : précise ce que représente hasGoals dans les autres méthodes. Périmètre du compte : tout integrationId externe est ignoré. Un résultat vide signifie généralement que Metrica n’est pas connecté ; vérifiez /api/v1/integrations/metrika/status.

Paramètres de requête

integrationIdstring (uuid)

Compteur Metrica. Sinon, tous les compteurs connectés au compte

includeInactiveboolean

Inclure les objectifs inactifs

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/analytics/metrika/goals
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/analytics/metrika/goals" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
{
"success": true
}

Réponse réussie

Résumé du trafic synthétique

/api/v1/analytics/metrika/synthetic/summary

Part des visites de robots et non organiques, afin qu’elles ne faussent pas l’analyse du trafic IA. Périmètre du compte : tout integrationId externe est ignoré. Un résultat vide signifie généralement que Metrica n’est pas connecté ; vérifiez /api/v1/integrations/metrika/status.

Paramètres de requête

integrationIdstring (uuid)

Compteur Metrica. Sinon, tous les compteurs connectés au compte

timeRangestring

24h | 7d | 30d | 90d | all

fromstring

Début de la période, date ISO

tostring

Fin de la période, date ISO

filterstring

Filtre de classification

hasGoalsboolean

Uniquement les visites ayant atteint des objectifs

pvMininteger

Nombre minimal de pages vues

pvMaxinteger

Nombre maximal de pages vues

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/analytics/metrika/synthetic/summary
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/analytics/metrika/synthetic/summary" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
{
"success": true
}

Réponse réussie

Lister les visites synthétiques

/api/v1/analytics/metrika/synthetic/list

Détail paginé de la synthèse : visites présentant des signes de trafic synthétique. Périmètre du compte : tout integrationId externe est ignoré. Un résultat vide signifie généralement que Metrica n’est pas connecté ; vérifiez /api/v1/integrations/metrika/status.

Paramètres de requête

integrationIdstring (uuid)

Compteur Metrica. Sinon, tous les compteurs connectés au compte

timeRangestring

24h | 7d | 30d | 90d | all

fromstring

Début de la période, date ISO

tostring

Fin de la période, date ISO

filterstring

Filtre de classification

qstring

Recherche

qScopestring

Périmètre de recherche

hasRevenueboolean

Uniquement avec des revenus

returningOnlyboolean

Uniquement les visiteurs récurrents

pageinteger

Page

pageSizeinteger

Taille de page

sortBystring

Champ de tri

sortOrderstring

asc | desc

hasGoalsboolean

Uniquement les visites ayant atteint des objectifs

pvMininteger

Nombre minimal de pages vues

pvMaxinteger

Nombre maximal de pages vues

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/analytics/metrika/synthetic/list
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/analytics/metrika/synthetic/list" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
{
"success": true
}

Réponse réussie

Compteurs connectés

/api/v1/integrations/metrika/list

Point de départ pour le trafic IA : renvoie integrationId pour les autres méthodes de cette rubrique.

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/integrations/metrika/list
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/integrations/metrika/list" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
{
"success": true
}

Réponse réussie

État de l’intégration

/api/v1/integrations/metrika/status

Indique si Metrica est connecté, la dernière synchronisation et si l’accès a expiré. Permet d’expliquer les résultats vides des méthodes de cette rubrique.

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/integrations/metrika/status
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/integrations/metrika/status" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
{
"success": true
}

Réponse réussie

Commerce

Fiches produit dans les réponses des IA

Analyse commerciale

/api/v1/analytics/commerce

Fiches produit affichées par les IA avec le texte de la réponse. view=summary : part des réponses contenant des fiches et évolution par IA ; sellers : principaux vendeurs et domaines ; brands : fiches de notre marque face aux concurrents ; cards : liste paginée.

Paramètres de requête

viewstring= summary

summary | sellers | brands | cards

summarysellersbrandscards
companyIdstring (uuid)

Entreprise. Si absente, preferredCompanyId de la clé est utilisé

productIdstring[]

Plusieurs valeurs acceptées

timeRangestring

24h | 7d | 30d | 90d | all

granularitystring

Découpage de l’évolution temporelle

tzstring

Fuseau horaire

labelIdstring[]

Groupes

labelSlugstring[]

Groupes par slug

labelFilterModestring

AND | OR

sourceIdstring[]

Sources

queryTypestring[]

Types de requêtes

includeDemoboolean

Inclure les données de démonstration

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
GET/api/v1/analytics/commerce
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/analytics/commerce" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
{
"success": true
}

Réponse réussie

Produits suivis

/api/v1/commerce/products

Catalogue utilisé pour identifier les produits dans les fiches des réponses. Sans lui, la rubrique Commerce affiche les vendeurs et domaines, mais ne distingue pas nos produits de ceux des concurrents.

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/commerce/products
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/commerce/products" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
{
"success": true
}

Réponse réussie

Ajouter un produit

/api/v1/commerce/products

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/commerce/products
1
2
3
curl -X POST "https://app.brandfound.ai/api/v1/commerce/products" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
{
"success": true
}

Réponse réussie

Surveillance

Exécution périodique des requêtes selon un calendrier

Lister les requêtes suivies

/api/v1/favorite-queries

Liste des requêtes configurées pour une exécution régulière.

Paramètres de requête

searchstring

Recherche textuelle

activeboolean

Uniquement les éléments activés

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
GET/api/v1/favorite-queries
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/favorite-queries" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
{
"success": true
}

Réponse réussie

Commencer le suivi d’une requête

/api/v1/favorite-queries

POST /api/v1/queries interroge normalement les IA UNE seule fois. Le suivi régulier est une entité distincte, créée ici. Créer l’enregistrement ne lance pas encore l’exécution : définissez ensuite le calendrier via POST /api/v1/favorite-queries/{id}/assignments. Chaque exécution planifiée est payante : 10 FoxCoin par réponse de CHAQUE IA. Un intervalle de 60 minutes sur trois IA représente 72 réponses par jour. En cas de fonds insuffisants, les exécutions sont suspendues sans reprise automatique (POST /api/v1/queries/queue/resume).

Corps de la requête

textstringobligatoire
typestringobligatoire
companyIdstring
productIdstring
languagestring= ru
regionstring= RU
isActiveboolean= true
tagsstring[]

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/favorite-queries
1
2
3
4
5
6
7
8
9
10
curl -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"
}'
1
2
3
{
"success": true
}

Réponse réussie

Obtenir une entrée de suivi

/api/v1/favorite-queries/{id}

Paramètres de requête

idstring (uuid)obligatoire

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
GET/api/v1/favorite-queries/{id}
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/favorite-queries/{id}" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
{
"success": true
}

Réponse réussie

Modifier une entrée de suivi

/api/v1/favorite-queries/{id}

Texte, entreprise, étiquettes et isActive. Pour suspendre sans supprimer : isActive: false.

Paramètres de requête

idstring (uuid)obligatoire

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
PATCH/api/v1/favorite-queries/{id}
1
2
3
curl -X PATCH "https://app.brandfound.ai/api/v1/favorite-queries/{id}" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
{
"success": true
}

Réponse réussie

Arrêter le suivi d’une requête

/api/v1/favorite-queries/{id}

Supprime l’enregistrement et son calendrier : aucune nouvelle exécution n’aura lieu. Les réponses et mentions déjà obtenues sont conservées, car elles appartiennent à la requête et non à l’abonnement.

Paramètres de requête

idstring (uuid)obligatoire

Réponses

204

Suppression réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
DELETE/api/v1/favorite-queries/{id}
1
2
3
curl -X DELETE "https://app.brandfound.ai/api/v1/favorite-queries/{id}" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
{
"success": true
}

Réponse réussie

Obtenir le calendrier des requêtes

/api/v1/favorite-queries/{id}/assignments

Paramètres de requête

idstring (uuid)obligatoire

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
GET/api/v1/favorite-queries/{id}/assignments
1
2
3
curl -X GET "https://app.brandfound.ai/api/v1/favorite-queries/{id}/assignments" \
-H "Authorization: Bearer gfx_YOUR_API_KEY" \
-H "Content-Type: application/json"
1
2
3
{
"success": true
}

Réponse réussie

Définir le calendrier des requêtes

/api/v1/favorite-queries/{id}/assignments

C’est ici que le suivi régulier démarre : un enregistrement sans calendrier n’exécute rien. Un seul calendrier par enregistrement ; un nouvel appel le remplace. Chaque exécution planifiée est payante : 10 FoxCoin par réponse de CHAQUE IA. Un intervalle de 60 minutes sur trois IA représente 72 réponses par jour. En cas de fonds insuffisants, les exécutions sont suspendues sans reprise automatique (POST /api/v1/queries/queue/resume).

Paramètres de requête

idstring (uuid)obligatoire

Corps de la requête

providersstring[]obligatoire

Liste : GET /api/v1/sources

frequencyMinutesintegerobligatoire

Intervalle entre les exécutions

isEnabledboolean= true

Suspendre sans supprimer le calendrier

timezonestring= Europe/Moscow

Fuseau utilisé pour daysOfWeek et hoursWindow

daysOfWeekinteger[]

1..7 ; vide = tous les jours

hoursWindowobject

Plage horaire en dehors de laquelle aucune exécution n’a lieu

modelobject

Correspondance « IA → modèle »

Réponses

200

Réponse réussie

400application/json

Erreur de validation des données d’entrée

VALIDATION_ERROR
401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/favorite-queries/{id}/assignments
1
2
3
4
5
6
7
8
9
10
11
12
curl -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"
}'
1
2
3
{
"success": true
}

Réponse réussie

Exécuter une requête maintenant

/api/v1/favorite-queries/{id}/run-now

Exécution immédiate, sans attendre ni modifier le calendrier. Facturée selon les tarifs habituels.

Paramètres de requête

idstring (uuid)obligatoire

Réponses

200

Réponse réussie

401application/json

Non authentifié : jeton absent ou invalide

UNAUTHORIZED
404application/json

Ressource introuvable

NOT_FOUND
429application/json

Limite de requêtes dépassée (IP : 120 req/min, par utilisateur : 60 req/min)

RATE_LIMIT_EXCEEDED
POST/api/v1/favorite-queries/{id}/run-now
1
2
3
curl -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"
1
2
3
{
"success": true
}

Réponse réussie