API-referentie

Bouw aangepaste integraties met de Asyntai REST API

API-sleutel ophalen

Betaald abonnement vereist: API-toegang is beschikbaar op Starter, Standard en Pro plannen. Prijzen bekijken

Overzicht

Met de Asyntai API kunt u AI-gestuurde klantenondersteuning integreren in elke applicatie. Verstuur berichten en ontvang intelligente antwoorden die zijn getraind op de inhoud van uw website en kennisbank.

Authenticatie

Alle API-verzoeken vereisen authenticatie met uw API-sleutel. U kunt uw API-sleutel ophalen op de pagina API-instellingen.

Voeg uw API-sleutel toe aan verzoeken met een van deze methoden:

  • Authorization-header (aanbevolen): Authorization: Bearer YOUR_API_KEY
  • X-API-Key-header: X-API-Key: YOUR_API_KEY

Houd uw API-sleutel geheim. Iedereen met uw sleutel heeft toegang tot uw account via de API. Maak deze nooit zichtbaar in client-side code.

Basis-URL

https://asyntai.com/api/v1/

Endpoints

POST /chat/

Verstuur een bericht en ontvang een AI-gegenereerd antwoord.

Verzoekinhoud

{
  "message": "What are your business hours?",
  "session_id": "user_123",      // optional
  "website_id": 1                 // optional
}
Parameter Type Vereist Beschrijving
message string Ja Het bericht van de gebruiker om naar de AI te sturen
session_id string Nee Unieke identificatie voor het gesprek. Gebruik dezelfde session_id om de gespreksgeschiedenis te behouden.
website_id integer Nee Specifiek website-ID. Indien niet opgegeven, wordt uw primaire website gebruikt.

Antwoord

{
  "success": true,
  "response": "Our business hours are Monday-Friday, 9 AM to 5 PM EST.",
  "session_id": "user_123"
}

Voorbeeld (cURL)

curl -X POST https://asyntai.com/api/v1/chat/ \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"message": "What are your business hours?", "session_id": "user_123"}'

Voorbeeld (Python)

import requests

response = requests.post(
    "https://asyntai.com/api/v1/chat/",
    headers={
        "Authorization": "Bearer YOUR_API_KEY",
        "Content-Type": "application/json"
    },
    json={
        "message": "What are your business hours?",
        "session_id": "user_123"
    }
)

data = response.json()
print(data["response"])

Voorbeeld (JavaScript)

const response = await fetch("https://asyntai.com/api/v1/chat/", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    message: "What are your business hours?",
    session_id: "user_123"
  })
});

const data = await response.json();
console.log(data.response);

GET /websites/

Toon alle websites die aan uw account zijn gekoppeld.

Antwoord

{
  "success": true,
  "websites": [
    {
      "id": 1,
      "name": "My Website",
      "domain": "example.com",
      "is_primary": true
    }
  ]
}

Voorbeeld (cURL)

curl https://asyntai.com/api/v1/websites/ \
  -H "Authorization: Bearer YOUR_API_KEY"

GET /conversations/

Haal de gespreksgeschiedenis op voor een specifieke sessie.

Queryparameters

Parameter Type Vereist Beschrijving
session_id string Ja Het sessie-ID waarvoor de geschiedenis moet worden opgehaald
limit integer Nee Maximaal aantal berichten om te retourneren (standaard: 50, max: 100)

Antwoord

{
  "success": true,
  "session_id": "user_123",
  "messages": [
    {
      "role": "user",
      "content": "What are your business hours?",
      "timestamp": "2024-01-15T10:30:00Z"
    },
    {
      "role": "assistant",
      "content": "Our business hours are Monday-Friday, 9 AM to 5 PM EST.",
      "timestamp": "2024-01-15T10:30:01Z"
    }
  ]
}

Voorbeeld (cURL)

curl "https://asyntai.com/api/v1/conversations/?session_id=user_123&limit=20" \
  -H "Authorization: Bearer YOUR_API_KEY"

GET /sessions/

Toon uw recente chatsessies. Gebruik dit om sessie-ID's te ontdekken, die u vervolgens kunt doorgeven aan /conversations/ om de volledige berichtgeschiedenis op te halen.

Queryparameters

Parameter Type Vereist Beschrijving
limit integer Nee Aantal recente sessies om te retourneren (standaard: 20, max: 100)
website_id string Nee Filter sessies op een specifiek website-ID
source string Nee Filteren op sessiebron: widget, api, whatsapp, instagram, messenger, gorgias, freshchat, zapier

Antwoord

{
  "success": true,
  "sessions": [
    {
      "session_id": "session_abc123def",
      "source": "widget",
      "message_count": 5,
      "first_message": "What are your business hours?",
      "first_message_at": "2024-01-15T10:30:00Z",
      "last_message_at": "2024-01-15T10:35:00Z",
      "website_domain": "example.com"
    }
  ]
}

Voorbeeld (cURL)

curl "https://asyntai.com/api/v1/sessions/?limit=10" \
  -H "Authorization: Bearer YOUR_API_KEY"

GET /leads/

Verzamelde leads ophalen — e-mailadressen en telefoonnummers die door bezoekers zijn ingediend tijdens chatgesprekken.

Queryparameters

Parameter Type Vereist Beschrijving
limit integer Nee Aantal leads om terug te geven (standaard: 50, max: 100)
website_id string Nee Filter leads op een specifiek website-ID

Antwoord

{
  "success": true,
  "leads": [
    {
      "session_id": "session_abc123def",
      "email": "visitor@example.com",
      "phone": "+1234567890",
      "page_url": "https://example.com/pricing",
      "started_at": "2024-01-15T10:30:00Z"
    }
  ]
}
Veld Type Beschrijving
session_id string De chatsessie-ID. Geef dit door aan /conversations/ om de volledige chatgeschiedenis te zien.
email string of null E-mailadres verstrekt door de bezoeker, of null indien niet verzameld
phone string of null Telefoonnummer verstrekt door de bezoeker, of null indien niet verzameld
page_url string of null De pagina-URL waar de bezoeker aan het chatten was
started_at string ISO 8601 tijdstempel van wanneer de chatsessie begon

Voorbeeld (cURL)

curl "https://asyntai.com/api/v1/leads/?limit=20" \
  -H "Authorization: Bearer YOUR_API_KEY"

Voorbeeld (Python)

import requests

response = requests.get(
    "https://asyntai.com/api/v1/leads/",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    params={"limit": 20}
)

leads = response.json()["leads"]
for lead in leads:
    print(f"{lead['email'] or ''} | {lead['phone'] or ''}")

GET /account/

Haal uw accountinformatie en gebruiksstatistieken op.

Antwoord

{
  "success": true,
  "account": {
    "email": "you@example.com",
    "plan": "starter",
    "messages_used": 150,
    "messages_limit": 2500
  }
}

Voorbeeld (cURL)

curl https://asyntai.com/api/v1/account/ \
  -H "Authorization: Bearer YOUR_API_KEY"

Meerdere websites? Kennisbank-endpoints gebruiken standaard uw primaire website. Als u meerdere websites heeft, geef dan website_id om een specifieke te targeten. U kunt uw website-ID's vinden met GET /websites/.

Dagelijkse uploadlimieten: Kennisbank-uploads (tekst, URL, spreadsheet) zijn onderworpen aan een dagelijkse tekenlimiet op basis van uw abonnement. Dit geldt voor de totale inhoud die per dag via alle kennisbank-endpoints wordt geüpload.

Abonnement Tekens/dag
Starter100.000
Standard500.000
Pro2.000.000

GET /knowledge/

Toon uw kennisbankitems. Dit zijn de inhoudsbronnen die uw AI-chatbot gebruikt om vragen te beantwoorden.

Queryparameters

Parameter Type Vereist Beschrijving
limit integer Nee Aantal items om te retourneren (standaard: 50, max: 100)
website_id string Nee Filter op website-ID (standaard uw primaire website)

Antwoord

{
  "success": true,
  "entries": [
    {
      "id": "abc-123-def",
      "type": "text",
      "title": "Business Hours",
      "description": "Manual text content (150 words)",
      "created_at": "2024-01-15T10:30:00Z"
    },
    {
      "id": "ghi-456-jkl",
      "type": "url",
      "title": "About Us - Example",
      "description": "Content from https://example.com/about",
      "created_at": "2024-01-14T09:00:00Z"
    }
  ]
}

Voorbeeld (cURL)

curl "https://asyntai.com/api/v1/knowledge/?limit=10" \
  -H "Authorization: Bearer YOUR_API_KEY"

POST /knowledge/text/

Voeg aangepaste tekstinhoud toe aan uw kennisbank. De AI gebruikt dit om vragen van bezoekers te beantwoorden.

Verzoekinhoud

{
  "title": "Return Policy",
  "content": "We offer a 30-day return policy on all items. Items must be unused and in original packaging. Refunds are processed within 5-7 business days.",
  "website_id": "123"
}
Parameter Type Vereist Beschrijving
title string Ja Een titel voor dit kennisbankitem
content string Ja De tekstinhoud (minimaal 10 tekens)
website_id string Nee Doelwebsite (standaard uw primaire website)

Antwoord

{
  "success": true,
  "id": "abc-123-def",
  "title": "Return Policy",
  "chunks_created": 1
}

Voorbeeld (cURL)

curl -X POST "https://asyntai.com/api/v1/knowledge/text/" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title": "Return Policy", "content": "We offer a 30-day return policy..."}'

POST /knowledge/url/

Voeg een webpagina toe aan uw kennisbank. De inhoud wordt automatisch opgehaald en geëxtraheerd.

Verzoekinhoud

{
  "url": "https://example.com/faq",
  "website_id": "123"
}
Parameter Type Vereist Beschrijving
url string Ja De URL waarvan de inhoud moet worden opgehaald
website_id string Nee Doelwebsite (standaard uw primaire website)

Antwoord

{
  "success": true,
  "id": "abc-123-def",
  "title": "FAQ - Example",
  "url": "https://example.com/faq",
  "chunks_created": 5
}

Voorbeeld (cURL)

curl -X POST "https://asyntai.com/api/v1/knowledge/url/" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/faq"}'

POST /knowledge/spreadsheet/

Upload een CSV- of Excel-spreadsheet (.xlsx) naar uw kennisbank. Elke rij wordt een apart kennisbankitem, ideaal voor productcatalogi, FAQ-lijsten, prijstabellen en adreslijsten.

Verzoek

Verzend als multipart/form-data (bestandsupload), niet als JSON.

Parameter Type Vereist Beschrijving
file bestand Ja Een .csv- of .xlsx-bestand. De eerste rij moet kolomkoppen bevatten. Maximaal aantal rijen per upload: Starter 500, Standard 2.000, Pro 10.000. Overtollige rijen worden afgekapt.
website_id string Nee Doelwebsite (standaard uw primaire website)

Antwoord

{
  "success": true,
  "id": "abc-123-def",
  "title": "products.csv",
  "rows_processed": 15,
  "chunks_created": 15
}

Voorbeeld (cURL)

curl -X POST "https://asyntai.com/api/v1/knowledge/spreadsheet/" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@products.csv"

DELETE /knowledge/{id}/

Verwijder een kennisbankitem. Het id is te vinden in het antwoord van GET /knowledge/.

Antwoord

{
  "success": true,
  "message": "Knowledge base entry deleted"
}

Voorbeeld (cURL)

curl -X DELETE "https://asyntai.com/api/v1/knowledge/abc-123-def/" \
  -H "Authorization: Bearer YOUR_API_KEY"

Tip: U kunt webhooks ook beheren via de API-instellingen pagina zonder code te schrijven.

GET /webhooks/

Toon uw geregistreerde webhooks.

Antwoord

{
  "success": true,
  "webhooks": [
    {
      "id": "abc-123-def",
      "url": "https://example.com/webhook",
      "events": ["message.received", "escalation.requested"],
      "is_active": true,
      "created_at": "2024-01-15T10:30:00Z"
    }
  ]
}

Voorbeeld (cURL)

curl "https://asyntai.com/api/v1/webhooks/" \
  -H "Authorization: Bearer YOUR_API_KEY"

POST /webhooks/

Registreer een nieuwe webhook om realtime evenementmeldingen te ontvangen.

Beschikbare gebeurtenissen

Gebeurtenis Beschrijving
message.received Een bezoeker heeft een bericht gestuurd en een antwoord ontvangen
conversation.started Er is een nieuwe chatsessie gestart
escalation.requested De AI heeft een escalatie naar een menselijke medewerker geactiveerd
takeover.started Een menselijke medewerker heeft een chatsessie overgenomen

Verzoekinhoud

{
  "url": "https://example.com/webhook",
  "events": ["message.received", "escalation.requested"],
  "website_id": "123"
}
Parameter Type Vereist Beschrijving
url string Ja De HTTPS-URL om webhook POST-verzoeken te ontvangen
events array Ja Lijst met gebeurtenissen om u op te abonneren (zie tabel hierboven)
website_id string Nee Doelwebsite (standaard uw primaire website)

Antwoord

{
  "success": true,
  "webhook": {
    "id": "abc-123-def",
    "url": "https://example.com/webhook",
    "events": ["message.received", "escalation.requested"],
    "secret": "whsec_abc123...",
    "created_at": "2024-01-15T10:30:00Z"
  }
}

Webhooks verifiëren: Elke webhook bevat een secret (alleen getoond bij aanmaak). Elke POST naar uw URL bevat een X-Webhook-Signature header \u2014 een HMAC-SHA256 van de verzoekbody ondertekend met uw geheim.

Voorbeeld (cURL)

curl -X POST "https://asyntai.com/api/v1/webhooks/" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/webhook", "events": ["message.received"]}'

DELETE /webhooks/{id}/

Verwijder een webhook. Het id is te vinden in het antwoord van GET /webhooks/.

Antwoord

{
  "success": true,
  "message": "Webhook deleted"
}

Voorbeeld (cURL)

curl -X DELETE "https://asyntai.com/api/v1/webhooks/abc-123-def/" \
  -H "Authorization: Bearer YOUR_API_KEY"

Foutmeldingen

Alle foutmeldingen volgen dit formaat:

{
  "success": false,
  "error": "Error message describing what went wrong"
}
Statuscode Beschrijving
400 Ongeldig verzoek - Ongeldige parameters of ontbrekende verplichte velden
401 Niet geautoriseerd - Ongeldige of ontbrekende API-sleutel
429 Te veel verzoeken - Berichtlimiet bereikt voor uw abonnement
503 Service niet beschikbaar - AI-service tijdelijk niet beschikbaar

Snelheidslimieten

API-gebruik is beperkt op basis van uw abonnement:

  • Free: 100 berichten/maand
  • Starter ($39/mnd): 2.500 berichten/maand
  • Standard ($139/mnd): 15.000 berichten/maand
  • Pro ($449/mnd): 50.000 berichten/maand

Hulp nodig?

Als u vragen heeft of problemen ondervindt, neem dan contact met ons op via hello@asyntai.com.