Your AI Connector Docs

API FAQ

Les FAQ sont les entrées de questions-réponses sur lesquelles votre bot IA s’appuie pour répondre aux clients. Chaque FAQ appartient à votre compte et peut être liée à une ou plusieurs campagnes, afin que la même réponse puisse être réutilisée partout où elle est pertinente. L’API FAQ vous permet de gérer cette bibliothèque par programmation : créer, mettre à jour, importer en masse, réorganiser et lier des FAQ à des campagnes depuis votre propre code.

Tous les points de terminaison ci-dessous sont relatifs à l’URL de base https://api.youraiconnector.com/v1. Chaque requête doit être authentifiée — voir Accès API et Authentification. L’accès à l’API est une fonctionnalité payante ; sans cela, les requêtes sont rejetées avec une 403.

Comment le bot utilise une FAQ : Lorsque vous créez ou modifiez une FAQ, la plateforme prépare ses données de recherche (utilisées pour faire correspondre la FAQ aux questions entrantes) en arrière-plan. Cela prend généralement quelques secondes, après quoi le bot commence à utiliser l’entrée automatiquement.


L’objet FAQ

Chaque FAQ renvoyée par l’API présente cette structure :

Champ Type Description
id string L’identifiant unique de la FAQ.
question string La question du client à laquelle cette entrée répond.
answer string La réponse fournie par le bot IA.
category string | null Étiquette de catégorie libre optionnelle.
tags string[] Étiquettes optionnelles pour organiser les FAQ.
is_active boolean Indique si le bot est autorisé à utiliser cette FAQ. La valeur par défaut est true.
is_global boolean Indique que la FAQ n’est pas liée à une campagne ou à un Agent spécifique. Cela ne signifie pas que la FAQ s’applique partout : une FAQ n’est utilisée que par les campagnes et les Agents auxquels elle est liée. La valeur par défaut est false.
usage_count integer Nombre de fois où cette FAQ a été utilisée dans les réponses de l’IA.
order_index integer Position d’affichage de cette FAQ au sein de sa campagne.
campaign_ids string[] Identifiants des campagnes auxquelles cette FAQ est liée.
created_at string | null Horodatage ISO 8601 de la création de la FAQ.
updated_at string | null Horodatage ISO 8601 de la dernière modification.

Les champs que vous pouvez définir sont : question, answer, is_active, is_global, category, tags et order_index. La plateforme gère tout le reste (données de recherche, compteurs d’utilisation, horodatages) ; tout autre champ dans le corps de votre requête est ignoré.


Lister les FAQ

GET /faqs

Renvoie les FAQ de votre compte, de la plus récente à la plus ancienne. Filtrez éventuellement par campagne unique ou par état actif.

Paramètres de requête

Paramètre Requis Description
campaign_id Non Ne renvoie que les FAQ liées à cette campagne.
is_active Non Ne renvoie que les FAQ avec cet état actif (true ou false). Ce filtre est appliqué par page, une page peut donc contenir moins d’éléments que limit.
limit Non Nombre maximum de FAQ par page. Par défaut 50, maximum 100.
cursor Non Un identifiant de FAQ après lequel continuer. Transmettez la valeur next_cursor de la page précédente.

cURL

curl "https://api.youraiconnector.com/v1/faqs?campaign_id=campaign123&limit=50&apiKey=YOUR_API_KEY"

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/faqs?campaign_id=campaign123&limit=50",
  { headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
console.log(data.faqs, data.next_cursor);

Python

import requests

res = requests.get(
    "https://api.youraiconnector.com/v1/faqs",
    params={"campaign_id": "campaign123", "limit": 50},
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
print(data["faqs"], data["next_cursor"])

Réponse

{
  "success": true,
  "faqs": [
    {
      "id": "aBcD1234eFgH5678",
      "question": "How long does shipping take?",
      "answer": "Standard shipping takes 3-5 business days.",
      "category": "shipping",
      "tags": ["logistics", "delivery"],
      "is_active": true,
      "is_global": false,
      "usage_count": 12,
      "order_index": 0,
      "campaign_ids": ["campaign123"],
      "created_at": "2026-01-01T12:00:00.000Z",
      "updated_at": "2026-01-02T08:30:00.000Z"
    }
  ],
  "next_cursor": "aBcD1234eFgH5678"
}

Lorsque next_cursor est null, il n’y a plus de résultats.


Obtenir une FAQ

GET /faqs/{faqId}

Renvoie une seule FAQ par son ID.

cURL

curl "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678?apiKey=YOUR_API_KEY"

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678",
  { headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const { faq } = await res.json();

Python

import requests

res = requests.get(
    "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
faq = res.json()["faq"]

Réponse

{
  "success": true,
  "faq": {
    "id": "aBcD1234eFgH5678",
    "question": "How long does shipping take?",
    "answer": "Standard shipping takes 3-5 business days.",
    "category": "shipping",
    "tags": ["logistics"],
    "is_active": true,
    "is_global": false,
    "usage_count": 12,
    "order_index": 0,
    "campaign_ids": ["campaign123"],
    "created_at": "2026-01-01T12:00:00.000Z",
    "updated_at": "2026-01-02T08:30:00.000Z"
  }
}

Créer une FAQ

POST /faqs

Crée une nouvelle FAQ et la lie à une campagne.

Champs de la requête

Champ Requis Description
campaign_id Oui La campagne à laquelle lier la nouvelle FAQ.
question Oui La question du client à laquelle cette entrée répond.
answer Oui La réponse que le bot doit donner.
is_active Non Indique si le bot peut utiliser cette FAQ. La valeur par défaut est true.
is_global Non Indique si la FAQ s’applique à toutes les campagnes. La valeur par défaut est false.
category Non Une étiquette de catégorie libre.
tags Non Un tableau d’étiquettes.
order_index Non Position d’affichage au sein de la campagne. La valeur par défaut est 0.

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "campaign_id": "campaign123",
    "question": "How long does shipping take?",
    "answer": "Standard shipping takes 3-5 business days.",
    "category": "shipping",
    "tags": ["logistics"]
  }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/faqs", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    campaign_id: "campaign123",
    question: "How long does shipping take?",
    answer: "Standard shipping takes 3-5 business days.",
    category: "shipping",
    tags: ["logistics"],
  }),
});
const { faq_id } = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/faqs",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "campaign_id": "campaign123",
        "question": "How long does shipping take?",
        "answer": "Standard shipping takes 3-5 business days.",
        "category": "shipping",
        "tags": ["logistics"],
    },
)
faq_id = res.json()["faq_id"]

Réponse

{
  "success": true,
  "faq_id": "aBcD1234eFgH5678"
}

Mettre à jour une FAQ

PUT /faqs/{faqId}

Met à jour partiellement une FAQ. Seuls les champs inscriptibles fournis sont modifiés ; tout le reste conserve sa valeur actuelle. La modification de question ou answer actualise automatiquement les données de recherche de la FAQ en arrière-plan.

Si vous envoyez question ou answer, ils doivent être des chaînes non vides. L’envoi d’aucun champ inscriptible reconnu renvoie une 400.

cURL

curl -X PUT "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "is_active": false }'

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678",
  {
    method: "PUT",
    headers: {
      "X-API-Key": "YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ is_active: false }),
  }
);
const data = await res.json();

Python

import requests

res = requests.put(
    "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"is_active": False},
)
data = res.json()

Réponse

{
  "success": true,
  "faq_id": "aBcD1234eFgH5678"
}

Supprimer une FAQ

DELETE /faqs/{faqId}

Supprime définitivement une FAQ. Passez éventuellement campaign_id en tant que paramètre de requête pour supprimer également la FAQ de la liste des FAQ de cette campagne.

Paramètres de requête

Paramètre Requis Description
campaign_id Non Supprimer également la FAQ de la liste de FAQ de cette campagne.

cURL

curl -X DELETE "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678?campaign_id=campaign123&apiKey=YOUR_API_KEY"

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678?campaign_id=campaign123",
  { method: "DELETE", headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();

Python

import requests

res = requests.delete(
    "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678",
    params={"campaign_id": "campaign123"},
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()

Réponse

{
  "success": true
}

Suppression en masse de FAQ

POST /faqs/bulk-delete

Supprime jusqu’à 500 FAQ en une seule requête. Lorsque campaign_id est fourni, les FAQ supprimées sont également retirées de la liste de FAQ de cette campagne.

Champs de la requête

Champ Requis Description
faq_ids Oui Un tableau non vide d’identifiants de FAQ à supprimer (max 500).
campaign_id Non Supprimer également les FAQ supprimées de la liste de FAQ de cette campagne.

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs/bulk-delete?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "faq_ids": ["faqId1", "faqId2"], "campaign_id": "campaign123" }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/faqs/bulk-delete", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    faq_ids: ["faqId1", "faqId2"],
    campaign_id: "campaign123",
  }),
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/faqs/bulk-delete",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"faq_ids": ["faqId1", "faqId2"], "campaign_id": "campaign123"},
)
data = res.json()

Réponse

{
  "success": true,
  "deleted_count": 2
}

FAQ sur l’importation

POST /faqs/import

Importez en masse jusqu’à 500 FAQ et liez-les toutes à une campagne. Les éléments dont le question correspond à une FAQ existante dans votre bibliothèque (insensible à la casse) mettent à jour cette FAQ au lieu d’en créer une copie.

Conseil de performance : La recherche de doublons analyse l’intégralité de votre bibliothèque de FAQ ; par conséquent, les très grandes bibliothèques ralentissent les importations. Privilégiez un petit nombre d’importations volumineuses plutôt que de nombreuses petites importations.

Champs de la requête

Champ Requis Description
campaign_id Oui La campagne à laquelle toutes les FAQ importées sont liées.
faqs Oui Un tableau non vide d’éléments de FAQ (500 max). Chaque élément doit avoir un question et un answer non vides ; il peut également inclure is_active, is_global, category, tags et order_index.

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs/import?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "campaign_id": "campaign123",
    "faqs": [
      { "question": "Do you ship internationally?", "answer": "Yes, we ship to most countries worldwide." },
      { "question": "What is your return policy?", "answer": "You can return any item within 30 days." }
    ]
  }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/faqs/import", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    campaign_id: "campaign123",
    faqs: [
      {
        question: "Do you ship internationally?",
        answer: "Yes, we ship to most countries worldwide.",
      },
      {
        question: "What is your return policy?",
        answer: "You can return any item within 30 days.",
      },
    ],
  }),
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/faqs/import",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "campaign_id": "campaign123",
        "faqs": [
            {"question": "Do you ship internationally?", "answer": "Yes, we ship to most countries worldwide."},
            {"question": "What is your return policy?", "answer": "You can return any item within 30 days."},
        ],
    },
)
data = res.json()

Réponse

{
  "success": true,
  "faq_ids": ["aBcD1234eFgH5678", "iJkL9012mNoP3456"],
  "imported_count": 2
}

faq_ids sont les identifiants des FAQ créées ou mises à jour, dans l’ordre où vous les avez fournis.


Réorganiser les FAQ

POST /faqs/reorder

Définit l’ordre d’affichage des FAQ d’une campagne. Fournissez la liste complète des identifiants de FAQ dans l’ordre souhaité ; la position de chaque FAQ est mise à jour pour correspondre à sa place dans le tableau.

Champs de la requête

Champ Requis Description
campaign_id Oui La campagne dont les FAQ doivent être réordonnées.
ordered_faq_ids Oui Un tableau non vide de tous les identifiants de FAQ de la campagne dans l’ordre d’affichage souhaité (500 max).

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs/reorder?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "campaign_id": "campaign123",
    "ordered_faq_ids": ["faqId2", "faqId1", "faqId3"]
  }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/faqs/reorder", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    campaign_id: "campaign123",
    ordered_faq_ids: ["faqId2", "faqId1", "faqId3"],
  }),
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/faqs/reorder",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "campaign_id": "campaign123",
        "ordered_faq_ids": ["faqId2", "faqId1", "faqId3"],
    },
)
data = res.json()

Réponse

{
  "success": true
}

Si la campagne ou l’un des identifiants de FAQ est introuvable dans votre compte, la requête renvoie 404 One or more FAQs were not found.


Lier une FAQ à une campagne

POST /faqs/{faqId}/link

Lie une FAQ existante à une campagne supplémentaire. Une FAQ peut être partagée par un nombre illimité de campagnes, de sorte que la même réponse n’a besoin d’être maintenue qu’une seule fois.

Champs de la requête

Champ Requis Description
campaign_id Oui La campagne à laquelle lier la FAQ.

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/link?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "campaign_id": "campaign456" }'

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/link",
  {
    method: "POST",
    headers: {
      "X-API-Key": "YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ campaign_id: "campaign456" }),
  }
);
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/link",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"campaign_id": "campaign456"},
)
data = res.json()

Réponse

{
  "success": true,
  "faq_id": "aBcD1234eFgH5678",
  "campaign_id": "campaign456"
}

Dissocier une FAQ d’une campagne

POST /faqs/{faqId}/unlink

Supprime une FAQ d’une campagne sans supprimer la FAQ elle-même. La FAQ reste dans votre bibliothèque et demeure associée à toute autre campagne.

Champs de la requête

Champ Requis Description
campaign_id Oui La campagne dont la FAQ doit être supprimée.

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/unlink?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "campaign_id": "campaign456" }'

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/unlink",
  {
    method: "POST",
    headers: {
      "X-API-Key": "YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ campaign_id: "campaign456" }),
  }
);
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/unlink",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"campaign_id": "campaign456"},
)
data = res.json()

Réponse

{
  "success": true,
  "faq_id": "aBcD1234eFgH5678",
  "campaign_id": "campaign456"
}

Reconstruire les données de recherche d’une FAQ

POST /faqs/{faqId}/rebuild-embeddings

Met en file d’attente une reconstruction des données utilisées par le bot IA pour trouver cette FAQ (ses données de recherche sémantique et par mots-clés). Ceci est utile si une FAQ n’est pas détectée dans les réponses comme prévu. La reconstruction s’exécute en arrière-plan et se termine généralement en quelques secondes ; la FAQ peut être temporairement exclue des réponses de l’IA pendant sa reconstruction.

Ce point de terminaison renvoie 202 Accepted car le travail se poursuit après l’envoi de la réponse. Le status est toujours "processing" — récupérez la FAQ plus tard si vous devez confirmer l’achèvement.

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/rebuild-embeddings?apiKey=YOUR_API_KEY"

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/rebuild-embeddings",
  { method: "POST", headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/rebuild-embeddings",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()

Réponse

{
  "success": true,
  "faq_id": "aBcD1234eFgH5678",
  "status": "processing"
}

Gestion de FAQ assistée par IA

Les points de terminaison ci-dessous vont au-delà du simple CRUD : ils font appel aux mêmes outils d’assistance par IA que ceux utilisés par l’éditeur de FAQ du tableau de bord — pour trouver les doublons, générer des entrées à partir d’un document et faire correspondre les FAQ aux tâches de lacunes de connaissances ouvertes. Les corps de requête de cet ensemble utilisent des noms de champs camelCase (campaignId, taskId, sourceIds…), correspondant aux structures de requête de l’application elle-même, plutôt que les snake_case utilisés ailleurs sur cette page — copiez les exemples ci-dessous plutôt que de deviner un nom de champ.

Dupliquer une FAQ pour une campagne spécifique

POST /faqs/{faqId}/fork-for-campaign

Crée une nouvelle FAQ qui est une copie d’une FAQ existante, limitée à une seule campagne, et relie cette campagne à la nouvelle copie au lieu de l’originale. Utilisez cette fonction lorsque vous souhaitez personnaliser une réponse pour une campagne sans la modifier partout où la FAQ originale est utilisée. La FAQ originale reste en place — elle perd seulement le lien avec cette campagne.

Champs de la requête

Champ Requis Description
campaign_id Oui La campagne à laquelle limiter la nouvelle copie et à relier depuis la FAQ originale.
question Oui La question pour la nouvelle copie spécifique à la campagne.
answer Oui La réponse pour la nouvelle copie spécifique à la campagne.

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/fork-for-campaign?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "campaign_id": "campaign456",
    "question": "How long does shipping take to the EU?",
    "answer": "For EU orders, shipping takes 7-10 business days."
  }'

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/fork-for-campaign",
  {
    method: "POST",
    headers: {
      "X-API-Key": "YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      campaign_id: "campaign456",
      question: "How long does shipping take to the EU?",
      answer: "For EU orders, shipping takes 7-10 business days.",
    }),
  }
);
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/faqs/aBcD1234eFgH5678/fork-for-campaign",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "campaign_id": "campaign456",
        "question": "How long does shipping take to the EU?",
        "answer": "For EU orders, shipping takes 7-10 business days.",
    },
)
data = res.json()

Réponse201 Created

{
  "success": true,
  "faq_id": "nEwFaQiD9012mNoP",
  "campaign_id": "campaign456",
  "original_faq_id": "aBcD1234eFgH5678"
}

Trouver les FAQ quasi identiques

POST /faqs/dedupe

Démarre une tâche en arrière-plan qui analyse votre bibliothèque de FAQ à la recherche d’entrées quasi identiques ou qui se chevauchent, et les fusionne ou les supprime lorsqu’elle est certaine du résultat. Utile après une importation en masse, ou après plusieurs séries de FAQ générées par IA ayant laissé des chevauchements dans la bibliothèque. Une seule tâche de déduplication peut être exécutée par compte à la fois — démarrer une seconde tâche alors qu’une autre est en cours renvoie 409.

Champs de la requête

Champ Requis Description
sourceIds Non Tableau des identifiants de source de base de connaissances pour limiter la déduplication. Omettez pour analyser l’ensemble de votre bibliothèque de FAQ.

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs/dedupe?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/faqs/dedupe", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({}),
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/faqs/dedupe",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={},
)
data = res.json()

Réponse202 Accepted

{
  "success": true,
  "job_id": "dedupJob_aBc123"
}

La tâche s’exécute en arrière-plan et prend généralement quelques minutes sur une grande bibliothèque. Il n’y a pas de point de terminaison de statut séparé — récupérez à nouveau GET /faqs après une courte attente pour voir ce qui a changé. Lorsque vous avez fini d’examiner le résultat, appelez le point de terminaison de rejet ci-dessous pour l’effacer.

Rejeter un résultat de vérification de doublons

POST /faqs/dedupe/dismiss

Efface la tâche de déduplication terminée afin qu’elle ne s’affiche plus comme résultat actif. Idempotent — sûr à appeler même s’il n’y a rien à rejeter. Renvoie 409 si la tâche est toujours queued ou processing (vous ne pouvez pas rejeter une exécution qui n’est pas terminée).

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs/dedupe/dismiss?apiKey=YOUR_API_KEY"

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/faqs/dedupe/dismiss", {
  method: "POST",
  headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/faqs/dedupe/dismiss",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()

Réponse

{ "success": true }

Générer des FAQ à partir de documents téléchargés

POST /faqs/generate-from-documents

Lit un ou plusieurs documents déjà présents dans le stockage de fichiers de votre compte et demande à l’IA de rédiger des FAQ à partir de leur contenu, en vérifiant les brouillons par rapport à votre bibliothèque existante afin de réutiliser ou de mettre à jour les entrées au lieu de créer des doublons. Les résultats ne sont pas écrits immédiatement ; ils sont stockés sous forme d’ensemble de modifications en attente sur la campagne pour que vous puissiez les examiner, puis appliqués (ou ignorés) avec Appliquer les modifications de FAQ examinées ci-dessous. Cela consomme des crédits, car il s’agit d’une passe de génération par IA sur le texte du document.

Ce point de terminaison ne prend pas en charge le fichier : storagePath doit pointer vers un fichier déjà présent dans votre propre dossier de téléchargements (users/{your user id}/uploads/), selon la même convention que Importer un document téléchargé sur l’API de la base de connaissances.

Champs de la requête

Champ Requis Description
campaignId Oui La campagne pour laquelle les FAQ générées sont proposées.
uploadedFiles Oui Tableau non vide de fichiers à lire, chacun { storagePath, fileName, mimeType }. storagePath doit commencer par users/{your user id}/uploads/.

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs/generate-from-documents?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "campaignId": "campaign123",
    "uploadedFiles": [
      { "storagePath": "users/abc123uid/uploads/handbook.pdf", "fileName": "handbook.pdf", "mimeType": "application/pdf" }
    ]
  }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/faqs/generate-from-documents", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    campaignId: "campaign123",
    uploadedFiles: [
      { storagePath: "users/abc123uid/uploads/handbook.pdf", fileName: "handbook.pdf", mimeType: "application/pdf" },
    ],
  }),
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/faqs/generate-from-documents",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "campaignId": "campaign123",
        "uploadedFiles": [
            {"storagePath": "users/abc123uid/uploads/handbook.pdf", "fileName": "handbook.pdf", "mimeType": "application/pdf"},
        ],
    },
)
data = res.json()

Réponse202 Accepted

{
  "success": true,
  "faqCount": 6,
  "reusedCount": 2,
  "modifiedCount": 1,
  "newCount": 3
}

faqCount est le nombre total de modifications proposées en attente d’examen ; reusedCount, modifiedCount et newCount décomposent cela en FAQ correspondant à une entrée existante inchangée, celles que l’IA propose de modifier, et les toutes nouvelles. Les fichiers téléchargés sont supprimés du stockage une fois le traitement terminé, qu’il réussisse ou non.

Appliquer les modifications de FAQ examinées

POST /faqs/apply-optimization

Applique (ou ignore) un ensemble en attente de modifications de FAQ proposées par l’IA — le type produit par Générer des FAQ à partir de documents ci-dessus, ou par l’examen d’optimisation des FAQ du tableau de bord. Vous choisissez exactement quelles modifications proposées accepter ; tout ce que vous ne mentionnez pas reste intact (une modification omise n’est jamais traitée comme un rejet entraînant une suppression).

Champs de la requête

Champ Requis Description
campaignId L’un de ces deux La campagne dont les modifications de FAQ en attente sont appliquées.
agentId L’un de ces deux L’agent IA dont les modifications de FAQ en attente sont appliquées, sur un compte natif de l’agent. Fournissez exactement l’un des campaignId / agentId, jamais les deux.
acceptedChanges Oui Tableau des modifications que vous acceptez, chacune { action, faq_id?, faq_ref_path?, question?, answer?, edit_scope? }. action est l’un des keep, remove, add_from_library, create_new, modify. Envoyez un tableau vide pour ignorer l’ensemble en attente sans rien appliquer.

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs/apply-optimization?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "campaignId": "campaign123",
    "acceptedChanges": [
      { "action": "create_new", "question": "Do you ship to the EU?", "answer": "Yes, EU shipping takes 7-10 business days." },
      { "action": "remove", "faq_ref_path": "users/abc123uid/faqs/oldFaqId" }
    ]
  }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/faqs/apply-optimization", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    campaignId: "campaign123",
    acceptedChanges: [
      { action: "create_new", question: "Do you ship to the EU?", answer: "Yes, EU shipping takes 7-10 business days." },
      { action: "remove", faq_ref_path: "users/abc123uid/faqs/oldFaqId" },
    ],
  }),
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/faqs/apply-optimization",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "campaignId": "campaign123",
        "acceptedChanges": [
            {"action": "create_new", "question": "Do you ship to the EU?", "answer": "Yes, EU shipping takes 7-10 business days."},
            {"action": "remove", "faq_ref_path": "users/abc123uid/faqs/oldFaqId"},
        ],
    },
)
data = res.json()

Réponse

{
  "success": true,
  "message": "Applied 2 FAQ changes",
  "faq_count": 7
}

faq_count est le nombre total de FAQ liées à la campagne (ou à l’agent) après application. S’il n’y avait aucun ensemble de modifications en attente à appliquer, la réponse est { "success": true, "message": "No pending FAQ changes to apply" }.

Trouver des FAQ similaires à une tâche

POST /faqs/similar-for-task

Classe votre bibliothèque de FAQ par pertinence par rapport à la question d’une tâche de lacune de connaissances — la même recherche que celle utilisée par le sélecteur « Utiliser une FAQ existante » du tableau de bord. Lecture seule. taskId doit pointer vers une tâche de type faq_update.

Ce point de terminaison répond toujours 200, même en cas d’échec attendu comme une tâche inconnue — vérifiez success dans le corps de la réponse plutôt que le statut HTTP.

Champs de la requête

Champ Requis Description
taskId Oui La tâche faq_update pour laquelle trouver des correspondances.
limit Non Nombre maximal de correspondances à renvoyer. Par défaut 20, limité à 50.

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs/similar-for-task?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "taskId": "task789", "limit": 10 }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/faqs/similar-for-task", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ taskId: "task789", limit: 10 }),
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/faqs/similar-for-task",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"taskId": "task789", "limit": 10},
)
data = res.json()

Réponse

{
  "success": true,
  "data": {
    "task_id": "task789",
    "matches": [
      {
        "faq_id": "aBcD1234eFgH5678",
        "question": "How long does shipping take?",
        "answer": "Standard shipping takes 3-5 business days.",
        "category": "shipping",
        "created_at": "2026-01-01T12:00:00.000Z",
        "similarity": 0.81,
        "embedding_similarity": 0.81,
        "keyword_similarity": 0.6,
        "bm25_score": 4.2,
        "distance": 0.19
      }
    ]
  }
}

Les correspondances sont triées par similarity (correspondance sémantique si disponible, chevauchement de mots-clés sinon), la meilleure en premier. En cas d’échec léger, la forme est { "success": false, "error": "...", "error_code": 404 }error_code reflète ce que serait normalement le statut HTTP.

Résoudre une tâche avec une FAQ existante

POST /faqs/resolve-task

Résout une tâche de lacune de connaissances en la liant à une FAQ que vous possédez déjà (au lieu d’en rédiger une nouvelle), envoie la réponse de cette FAQ au contact qui a déclenché la lacune et marque la tâche comme terminée. Utilisez ceci après que Trouver des FAQ similaires à une tâche a révélé une FAQ existante qui couvre déjà la question.

Comme pour le point de terminaison ci-dessus, cela répond toujours 200 — vérifiez success dans le corps de la réponse.

Champs de la requête

Champ Requis Description
taskId Oui La tâche faq_update à résoudre.
faqId Oui La FAQ existante à lier et à envoyer comme réponse.

cURL

curl -X POST "https://api.youraiconnector.com/v1/faqs/resolve-task?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "taskId": "task789", "faqId": "aBcD1234eFgH5678" }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/faqs/resolve-task", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ taskId: "task789", faqId: "aBcD1234eFgH5678" }),
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/faqs/resolve-task",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"taskId": "task789", "faqId": "aBcD1234eFgH5678"},
)
data = res.json()

Réponse

{
  "success": true,
  "data": {
    "task_id": "task789",
    "faq_id": "aBcD1234eFgH5678",
    "follow_up_status": "published"
  }
}

follow_up_status vous indique ce qui est arrivé au suivi du contact : published (envoyé immédiatement), queued (l’IA était déjà en train de répondre à ce contact, donc le message sera envoyé ensuite), skipped_no_contact (la tâche n’a aucun contact lié), ou skipped_no_campaign (aucune campagne via laquelle l’envoyer).


Erreurs de l’API FAQ

Les points de terminaison FAQ renvoient l’enveloppe d’erreur standard :

{
  "success": false,
  "error": "FAQ not found"
}
Statut Quand cela se produit sur un point de terminaison FAQ
400 Un champ requis est manquant ou invalide (par exemple un question vide, un campaign_id manquant, ou plus de 500 éléments dans une requête groupée).
404 La FAQ ou la campagne est introuvable — soit elle n’existe pas, soit elle appartient à un autre compte.
409 POST /faqs/dedupe a été appelé alors qu’un travail de dédoublonnage est déjà queued/processing, ou POST /faqs/dedupe/dismiss a été appelé alors que le travail n’est pas encore terminé.

Les codes partagés que chaque point de terminaison peut renvoyer — 401, 403 (votre forfait n’inclut pas l’accès à l’API), 429 (limite de débit) et 500 — sont répertoriés avec des conseils de nouvelle tentative dans Erreurs et pagination.

POST /faqs/similar-for-task et POST /faqs/resolve-task sont les deux exceptions sur cette page : ils répondent 200 même pour un échec attendu (tâche inconnue, type de tâche incorrect) et placent le statut réel dans le error_code du corps de la réponse — voir chaque point de terminaison ci-dessus.


Connexe

  • API Campagnes — les campagnes auxquelles vos FAQ sont liées.
  • API Base de connaissances — importez automatiquement des sites web et des documents dans des FAQ, et regroupez les FAQ dans des groupes de connaissances réutilisables.
  • Accès API — générez votre clé API.
  • Authentification — toutes les méthodes pour transmettre votre clé.