Veelgestelde vragen API
Veelgestelde vragen (FAQ’s) zijn de vraag-en-antwoorditems die je AI-bot gebruikt bij het beantwoorden van klanten. Elke FAQ hoort bij je account en kan worden gekoppeld aan een of meer campagnes, zodat hetzelfde antwoord overal waar relevant kan worden hergebruikt. Met de FAQ-API kun je die bibliotheek programmatisch beheren — FAQ’s aanmaken, bijwerken, in bulk importeren, opnieuw ordenen en koppelen aan campagnes vanuit je eigen code.
Alle onderstaande eindpunten zijn relatief ten opzichte van de basis-URL https://api.youraiconnector.com/v1. Elk verzoek moet worden geverifieerd — zie API-toegang en Authenticatie. API-toegang is een betaalde functie; zonder deze functie worden verzoeken afgewezen met een 403.
Hoe de bot een FAQ gebruikt: Wanneer je een FAQ aanmaakt of wijzigt, bereidt het platform op de achtergrond de zoekgegevens voor (die worden gebruikt om de FAQ te matchen met inkomende vragen). Dit is meestal binnen enkele seconden voltooid, waarna de bot het item automatisch begint te gebruiken.
Het FAQ-object
Elke FAQ die wordt geretourneerd door de API heeft deze vorm:
| Veld | Type | Beschrijving |
|---|---|---|
id |
string | De unieke identificatiecode van de FAQ. |
question |
string | De klantvraag die dit item beantwoordt. |
answer |
string | Het antwoord dat de AI-bot geeft. |
category |
string | null | Optioneel label voor een vrije categorie. |
tags |
string[] | Optionele labels voor het organiseren van FAQ’s. |
is_active |
boolean | Of de bot deze FAQ mag gebruiken. Standaard ingesteld op true. |
is_global |
boolean | Markeert de FAQ als niet gebonden aan één specifieke campagne of Agent. Dit betekent niet dat de FAQ overal van toepassing is: een FAQ wordt alleen gebruikt door de campagnes en Agents waaraan deze is gekoppeld. Standaard ingesteld op false. |
usage_count |
integer | Hoe vaak deze FAQ is gebruikt in AI-antwoorden. |
order_index |
integer | Weergavepositie van deze FAQ binnen de campagne. |
campaign_ids |
string[] | ID’s van de campagnes waaraan deze FAQ is gekoppeld. |
created_at |
string | null | ISO 8601-tijdstempel van wanneer de FAQ is aangemaakt. |
updated_at |
string | null | ISO 8601-tijdstempel van de laatste wijziging. |
De velden die je kunt instellen zijn: question, answer, is_active, is_global, category, tags en order_index. Het platform beheert al het overige (zoekgegevens, gebruiksaantallen, tijdstempels); alle andere velden in je verzoekbody worden genegeerd.
FAQ’s weergeven
GET /faqs
Retourneert de FAQ’s in je account, met de nieuwste eerst. Filter optioneel op een enkele campagne of op actieve status.
Queryparameters
| Parameter | Vereist | Beschrijving |
|---|---|---|
campaign_id |
Nee | Retourneer alleen FAQ’s die aan deze campagne zijn gekoppeld. |
is_active |
Nee | Retourneer alleen FAQ’s met deze actieve status (true of false). Dit filter wordt per pagina toegepast, dus een pagina kan minder items bevatten dan limit. |
limit |
Nee | Maximaal aantal FAQ’s per pagina. Standaard 50, maximaal 100. |
cursor |
Nee | Een FAQ-ID om na verder te gaan. Geef de next_cursor-waarde van de vorige pagina door. |
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"])
Antwoord
{
"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"
}
Wanneer next_cursor null is, zijn er geen resultaten meer.
Een FAQ ophalen
GET /faqs/{faqId}
Geeft één enkele FAQ terug op basis van het 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"]
Antwoord
{
"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"
}
}
Een FAQ aanmaken
POST /faqs
Maakt een nieuwe FAQ aan en koppelt deze aan een campagne.
Aanvraagvelden
| Veld | Verplicht | Beschrijving |
|---|---|---|
campaign_id |
Ja | De campagne waaraan de nieuwe FAQ gekoppeld moet worden. |
question |
Ja | De klantvraag die dit item beantwoordt. |
answer |
Ja | Het antwoord dat de bot moet geven. |
is_active |
Nee | Of de bot deze FAQ mag gebruiken. Standaard is true. |
is_global |
Nee | Of de FAQ van toepassing is op alle campagnes. Standaard is false. |
category |
Nee | Een vrij in te vullen categorielabel. |
tags |
Nee | Een reeks labels. |
order_index |
Nee | Weergavepositie binnen de campagne. Standaard is 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"]
Antwoord
{
"success": true,
"faq_id": "aBcD1234eFgH5678"
}
Een FAQ bijwerken
PUT /faqs/{faqId}
Werkt een FAQ gedeeltelijk bij. Alleen de opgegeven beschrijfbare velden worden gewijzigd; al het andere behoudt de huidige waarde. Het wijzigen van de question of answer ververst automatisch de zoekgegevens van de FAQ op de achtergrond.
Als u question of answer verstuurt, moeten dit niet-lege tekenreeksen zijn. Het versturen van geen herkende beschrijfbare velden resulteert in een 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()
Antwoord
{
"success": true,
"faq_id": "aBcD1234eFgH5678"
}
Een FAQ verwijderen
DELETE /faqs/{faqId}
Verwijdert een FAQ permanent. Geef optioneel campaign_id door als queryparameter om de FAQ ook uit de FAQ-lijst van die campagne te verwijderen.
Queryparameters
| Parameter | Vereist | Beschrijving |
|---|---|---|
campaign_id |
Nee | Verwijder ook de FAQ uit de FAQ-lijst van deze 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()
Antwoord
{
"success": true
}
Bulk-verwijderen van FAQ’s
POST /faqs/bulk-delete
Verwijdert maximaal 500 FAQ’s in één verzoek. Wanneer campaign_id wordt meegegeven, worden de verwijderde FAQ’s ook uit de FAQ-lijst van die campagne verwijderd.
Aanvraagvelden
| Veld | Vereist | Beschrijving |
|---|---|---|
faq_ids |
Ja | Een niet-lege array met FAQ-ID’s om te verwijderen (max. 500). |
campaign_id |
Nee | Verwijder ook de verwijderde FAQ’s uit de FAQ-lijst van deze 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()
Antwoord
{
"success": true,
"deleted_count": 2
}
Veelgestelde vragen importeren
POST /faqs/import
Importeer in bulk tot 500 veelgestelde vragen en koppel ze allemaal aan één campagne. Items waarvan de question overeenkomt met een bestaande veelgestelde vraag in uw bibliotheek (ongevoelig voor hoofdletters) werken die veelgestelde vraag bij in plaats van een duplicaat aan te maken.
Prestatietip: Het zoeken naar duplicaten scant uw gehele bibliotheek met veelgestelde vragen, dus zeer grote bibliotheken maken imports trager. Geef de voorkeur aan minder, grotere imports boven veel kleine.
Aanvraagvelden
| Veld | Verplicht | Beschrijving |
|---|---|---|
campaign_id |
Ja | De campagne waaraan alle geïmporteerde veelgestelde vragen zijn gekoppeld. |
faqs |
Ja | Een niet-lege array van veelgestelde vragen (max. 500). Elk item moet een niet-lege question en answer bevatten; het kan ook is_active, is_global, category, tags en order_index bevatten. |
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()
Antwoord
{
"success": true,
"faq_ids": ["aBcD1234eFgH5678", "iJkL9012mNoP3456"],
"imported_count": 2
}
faq_ids zijn de aangemaakte of bijgewerkte ID’s van de veelgestelde vragen, in de volgorde waarin u ze heeft aangeleverd.
Veelgestelde vragen opnieuw ordenen
POST /faqs/reorder
Stelt de weergavevolgorde in van de veelgestelde vragen van een campagne. Lever de volledige lijst met ID’s van de veelgestelde vragen aan in de gewenste volgorde; de positie van elke veelgestelde vraag wordt bijgewerkt om overeen te komen met de plaats in de array.
Aanvraagvelden
| Veld | Vereist | Beschrijving |
|---|---|---|
campaign_id |
Ja | De campagne waarvan de FAQ’s opnieuw worden gerangschikt. |
ordered_faq_ids |
Ja | Een niet-lege array van alle FAQ-ID’s van de campagne in de gewenste weergavevolgorde (max. 500). |
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()
Antwoord
{
"success": true
}
Als de campagne of een van de FAQ-ID’s niet in uw account wordt gevonden, retourneert het verzoek 404 One or more FAQs were not found.
Een FAQ koppelen aan een campagne
POST /faqs/{faqId}/link
Koppelt een bestaande FAQ aan een extra campagne. Een FAQ kan door een willekeurig aantal campagnes worden gedeeld, waardoor hetzelfde antwoord slechts één keer hoeft te worden onderhouden.
Aanvraagvelden
| Veld | Vereist | Beschrijving |
|---|---|---|
campaign_id |
Ja | De campagne waaraan de FAQ moet worden gekoppeld. |
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()
Antwoord
{
"success": true,
"faq_id": "aBcD1234eFgH5678",
"campaign_id": "campaign456"
}
Een FAQ ontkoppelen van een campagne
POST /faqs/{faqId}/unlink
Verwijdert een FAQ uit een campagne zonder de FAQ zelf te verwijderen. De FAQ blijft in uw bibliotheek staan en blijft gekoppeld aan alle andere campagnes.
Aanvraagvelden
| Veld | Vereist | Beschrijving |
|---|---|---|
campaign_id |
Ja | De campagne waaruit de FAQ moet worden verwijderd. |
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()
Antwoord
{
"success": true,
"faq_id": "aBcD1234eFgH5678",
"campaign_id": "campaign456"
}
Zoekgegevens van een FAQ opnieuw opbouwen
POST /faqs/{faqId}/rebuild-embeddings
Plaatst een verzoek in de wachtrij om de gegevens die de AI-bot gebruikt om deze FAQ te vinden (de semantische en trefwoord-zoekgegevens) opnieuw op te bouwen. Dit is handig als een FAQ niet zoals verwacht wordt opgepikt in antwoorden. Het opnieuw opbouwen gebeurt op de achtergrond en is meestal binnen enkele seconden voltooid; de FAQ kan tijdelijk worden uitgesloten van AI-antwoorden terwijl deze opnieuw wordt opgebouwd.
Dit eindpunt retourneert 202 Accepted omdat het werk doorgaat nadat het antwoord is verzonden. De status is altijd "processing" — haal de FAQ later opnieuw op als u de voltooiing wilt bevestigen.
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()
Antwoord
{
"success": true,
"faq_id": "aBcD1234eFgH5678",
"status": "processing"
}
AI-ondersteund FAQ-beheer
De onderstaande endpoints gaan verder dan eenvoudige CRUD-bewerkingen: ze roepen dezelfde AI-assistentietools aan die de FAQ-editor van het dashboard gebruikt — voor het vinden van duplicaten, het genereren van items uit een document en het koppelen van FAQ’s aan openstaande taken voor kennisleemtes. Request-bodies in deze set gebruiken camelCase veldnamen (campaignId, taskId, sourceIds…), die overeenkomen met de request-structuren van de app zelf, in plaats van de snake_case die elders op deze pagina worden gebruikt — kopieer de onderstaande voorbeelden in plaats van te gokken naar een veldnaam.
Een FAQ splitsen naar een kopie voor alleen een campagne
POST /faqs/{faqId}/fork-for-campaign
Maakt een nieuwe FAQ aan die een kopie is van een bestaande, beperkt tot één campagne, en koppelt die campagne opnieuw aan de nieuwe kopie in plaats van aan het origineel. Gebruik dit wanneer u een antwoord voor één campagne wilt aanpassen zonder dit overal waar de originele FAQ wordt gebruikt te wijzigen. De originele FAQ blijft behouden — deze verliest alleen de koppeling met deze campagne.
Aanvraagvelden
| Veld | Verplicht | Beschrijving |
|---|---|---|
campaign_id |
Ja | De campagne waartoe de nieuwe kopie moet worden beperkt en waarvan de koppeling met de originele FAQ moet worden verlegd. |
question |
Ja | De vraag voor de nieuwe, campagnespecifieke kopie. |
answer |
Ja | Het antwoord voor de nieuwe, campagnespecifieke kopie. |
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()
Antwoord — 201 Created
{
"success": true,
"faq_id": "nEwFaQiD9012mNoP",
"campaign_id": "campaign456",
"original_faq_id": "aBcD1234eFgH5678"
}
Bijna-duplicaten van FAQ’s vinden
POST /faqs/dedupe
Start een achtergrondtaak die uw FAQ-bibliotheek scant op bijna-duplicaten en overlappende items en deze samenvoegt of verwijdert waar het systeem zeker van is. Handig na een bulkimport, of nadat verschillende rondes van door AI gegenereerde FAQ’s voor overlap in de bibliotheek hebben gezorgd. Er kan per account slechts één ontdubbelingstaak tegelijk worden uitgevoerd — het starten van een tweede taak terwijl er nog een loopt, retourneert 409.
Aanvraagvelden
| Veld | Verplicht | Beschrijving |
|---|---|---|
sourceIds |
Nee | Array van bron-ID’s van de kennisbank om de ontdubbeling tot te beperken. Laat weg om uw gehele FAQ-bibliotheek te scannen. |
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()
Antwoord — 202 Accepted
{
"success": true,
"job_id": "dedupJob_aBc123"
}
De taak wordt op de achtergrond uitgevoerd en duurt meestal enkele minuten bij een grote bibliotheek. Er is geen apart status-endpoint — haal GET /faqs opnieuw op na een korte wachttijd om te zien wat er is veranderd. Wanneer u klaar bent met het beoordelen van het resultaat, roept u het onderstaande dismiss-endpoint aan om het te wissen.
Een resultaat van de dubbelcheck negeren
POST /faqs/dedupe/dismiss
Wist de voltooide ontdubbelingstaak zodat deze niet langer als actief resultaat wordt weergegeven. Idempotent — veilig om aan te roepen, zelfs als er niets te negeren valt. Retourneert 409 als de taak nog queued of processing is (u kunt een taak die nog niet is voltooid niet negeren).
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()
Antwoord
{ "success": true }
Veelgestelde vragen genereren uit geüploade documenten
POST /faqs/generate-from-documents
Leest een of meer documenten die al in de bestandsopslag van uw account staan en laat de AI concept-FAQ’s opstellen op basis van de inhoud. Hierbij worden de concepten getoetst aan uw bestaande bibliotheek, zodat items worden hergebruikt of bijgewerkt in plaats van dat er duplicaten worden aangemaakt. Resultaten worden niet direct weggeschreven; ze worden opgeslagen als een set wijzigingen in afwachting van beoordeling voor de campagne. U kunt deze vervolgens toepassen (of negeren) met Toegepaste FAQ-wijzigingen beoordelen hieronder. Dit kost credits, aangezien het een AI-generatieproces is dat de documenttekst doorloopt.
Dit eindpunt bevat het bestand niet: storagePath moet verwijzen naar een bestand dat zich al in uw eigen uploadmap bevindt (users/{your user id}/uploads/), volgens dezelfde conventie als Een geüpload document importeren in de Knowledge Base API.
Aanvraagvelden
| Veld | Vereist | Beschrijving |
|---|---|---|
campaignId |
Ja | De campagne waarvoor de gegenereerde FAQ’s worden voorgesteld. |
uploadedFiles |
Ja | Niet-lege array van te lezen bestanden, elk { storagePath, fileName, mimeType }. storagePath moet beginnen met 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()
Antwoord — 202 Accepted
{
"success": true,
"faqCount": 6,
"reusedCount": 2,
"modifiedCount": 1,
"newCount": 3
}
faqCount is het totaal aantal voorgestelde wijzigingen dat wacht op beoordeling; reusedCount, modifiedCount en newCount splitsen dit uit in FAQ’s die ongewijzigd overeenkwamen met een bestaand item, items die de AI voorstelt te bewerken, en volledig nieuwe items. Geüploade bestanden worden uit de opslag verwijderd zodra de verwerking is voltooid, ongeacht of deze is geslaagd.
Beoordeelde FAQ-wijzigingen toepassen
POST /faqs/apply-optimization
Past een set in afwachting zijnde, door AI voorgestelde FAQ-wijzigingen toe (of negeert deze) — het type dat wordt geproduceerd door FAQ’s genereren uit documenten hierboven, of door de FAQ-optimalisatiebeoordeling in het dashboard. U kiest precies welke voorgestelde wijzigingen u accepteert; alles wat u niet vermeldt, blijft ongewijzigd (een weggelaten wijziging wordt nooit behandeld als een afwijzing die iets verwijdert).
Aanvraagvelden
| Veld | Vereist | Beschrijving |
|---|---|---|
campaignId |
Een van deze twee | De campagne waarvan de in afwachting zijnde FAQ-wijzigingen worden toegepast. |
agentId |
Een van deze twee | De AI-agent waarvan de in afwachting zijnde FAQ-wijzigingen worden toegepast, op een account met agent-native ondersteuning. Lever precies een van campaignId / agentId, nooit beide. |
acceptedChanges |
Ja | Array van de wijzigingen die u accepteert, elk { action, faq_id?, faq_ref_path?, question?, answer?, edit_scope? }. action is een van keep, remove, add_from_library, create_new, modify. Stuur een lege array om de set in afwachting te negeren zonder iets toe te passen. |
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()
Antwoord
{
"success": true,
"message": "Applied 2 FAQ changes",
"faq_count": 7
}
faq_count is het totale aantal gekoppelde FAQ’s van de campagne (of Agent) na toepassing. Als er geen set wijzigingen in afwachting was om toe te passen, is de reactie { "success": true, "message": "No pending FAQ changes to apply" }.
FAQ’s zoeken die vergelijkbaar zijn met een taak
POST /faqs/similar-for-task
Rangschikt uw FAQ-bibliotheek op relevantie voor de vraag van een kennisgat-taak — dezelfde zoekfunctie die achter de “Gebruik een bestaande FAQ”-kiezer in het dashboard zit. Alleen-lezen. taskId moet verwijzen naar een taak van het type faq_update.
Dit eindpunt antwoordt altijd met 200, zelfs bij een verwachte fout zoals een onbekende taak — controleer success in de body in plaats van de HTTP-status.
Aanvraagvelden
| Veld | Vereist | Beschrijving |
|---|---|---|
taskId |
Ja | De faq_update taak om overeenkomsten voor te vinden. |
limit |
Nee | Maximum aantal terug te geven overeenkomsten. Standaard 20, met een maximum van 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()
Antwoord
{
"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
}
]
}
}
Overeenkomsten worden gesorteerd op similarity (semantische match indien beschikbaar, anders trefwoordoverlap), de beste eerst. Bij een zachte fout is de vorm { "success": false, "error": "...", "error_code": 404 } — error_code weerspiegelt wat de HTTP-status normaal gesproken zou zijn.
Een taak oplossen met een bestaande FAQ
POST /faqs/resolve-task
Lost een kennisgat-taak op door deze te koppelen aan een FAQ die je al hebt (in plaats van een nieuwe te schrijven), verstuurt het antwoord van die FAQ naar de contactpersoon die het gat heeft veroorzaakt, en markeert de taak als voltooid. Gebruik dit nadat Vind FAQ’s die lijken op een taak een bestaande FAQ heeft opgeleverd die de vraag al beantwoordt.
Net als het bovenstaande eindpunt antwoordt dit altijd met 200 — controleer success in de body.
Aanvraagvelden
| Veld | Vereist | Beschrijving |
|---|---|---|
taskId |
Ja | De faq_update taak om op te lossen. |
faqId |
Ja | De bestaande FAQ om te koppelen en als antwoord te versturen. |
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()
Antwoord
{
"success": true,
"data": {
"task_id": "task789",
"faq_id": "aBcD1234eFgH5678",
"follow_up_status": "published"
}
}
follow_up_status vertelt je wat er is gebeurd met de follow-up van de contactpersoon: published (direct verzonden), queued (de AI was al bezig met antwoorden aan die contactpersoon, dus het wordt daarna verstuurd), skipped_no_contact (de taak heeft geen gekoppelde contactpersoon), of skipped_no_campaign (geen campagne om het via te versturen).
Veelgestelde vragen API-fouten
Endpoints voor veelgestelde vragen retourneren de standaard fouten-envelop:
{
"success": false,
"error": "FAQ not found"
}
| Status | Wanneer dit gebeurt op een FAQ-eindpunt |
|---|---|
400 |
Een vereist veld ontbreekt of is ongeldig (bijvoorbeeld een lege question, een ontbrekende campaign_id, of meer dan 500 items in een bulkverzoek). |
404 |
De FAQ of campagne is niet gevonden — deze bestaat niet of behoort tot een ander account. |
409 |
POST /faqs/dedupe werd aangeroepen terwijl een deduplicatietaak al queued/processing is, of POST /faqs/dedupe/dismiss werd aangeroepen terwijl de taak nog niet is voltooid. |
De gedeelde codes die elk endpoint kan retourneren — 401, 403 (uw abonnement bevat geen API-toegang), 429 (snelheidslimiet) en 500 — worden vermeld met richtlijnen voor opnieuw proberen in Fouten & Paginering.
POST /faqs/similar-for-task en POST /faqs/resolve-task zijn de twee uitzonderingen op deze pagina: ze antwoorden met 200, zelfs bij een verwachte fout (onbekende taak, verkeerd taaktype), en plaatsen de werkelijke status in de error_code van de body — zie elk eindpunt hierboven.
Gerelateerd
- Campagnes API — de campagnes waaraan je FAQ’s zijn gekoppeld.
- Kennisbank API — importeer websites en documenten automatisch in FAQ’s en bundel FAQ’s in herbruikbare kennisgroepen.
- API-toegang — genereer je API-sleutel.
- Authenticatie — alle manieren om je sleutel door te geven.