Direct verbinden met onze API

Om voor klanten een alternatief te bieden voor crawling hebben we enkele endpoints beschikbaar gesteld om zo vanuit externe bronnen informatie met ons platform te delen, of vanuit ons platform te lezen. Deze endpoints zijn primair voor het lezen, schrijven, bijwerken en verwijderen van de zogeheten Documenten.


Documenten

Binnen het platform zijn Documenten de bronnen waaruit wij antwoorden genereren. Alle documenten voor een klant bijelkaar noemen wij de kennisbank. Met de API heeft een externe partij invloed op deze kennisbank en daarmee de kwaliteit van de gegenereerde antwoorden.


Authenticatie

Om HTTP-verzoeken naar ons systeem te authoriseren gebruiken we een zogeheten ‘long lived Bearer token’.

Wij zijn in staat tokens te beheren met alle permissies, maar ook met een selectie van deze permissies.
Bijvoorbeeld: Als een openbare service alleen gemachtigd moet zijn om informatie op te vragen, dat al is aangemaakt door een andere strategie of token.

Voorbeeld van Authorization-header met een Bearer-token:

Authorization: Bearer 31090db4198c2bf9f9a7d768bf6107a40f102d47534cb122b0

Aan deze authenticatie-token verlenen wij de volgende (CRUD-)permissies:

  • documents:create

  • documents:read

  • documents:update

  • documents:delete


API Documentatie

Algemene informatie en uitgangspunten

  1. De API is een combinatie van het JSON:API standaard bovenop een REST-architectuur.
    Dit heeft als voordeel dat de URL-structuur van de beschikbare endpoints en de request/response formats voorspelbaar zijn. De API verwacht hierom de volgende headers bij elke request:

    • Accept: application/vnd.api+json

    • Content-Type: application/vnd.api+json

  2. Alle endpoints zijn per klant beschikbaar onder een eigen sub-domein,
    bijvoorbeeld: https://{klant}.vragen.ai/api/v1/

  3. In antwoorden vanuit de API vind je de property content_cleaned terug.
    Hierin vind je de opgeslagen content terug dat door onze filter en parser is gegaan, t.b.v. verdere verwerking. Hiermee kan worden gevalideerd of de verzonden informatie goed wordt verwerkt.


Document Schema

De volgende informatie kan worden meegegeven per document:

  • url
    Elke document moet een unieke bron-URL hebben.
    Hiermee maken we elk document uniek en te onderscheiden.

  • external_reference (optioneel)
    Een optionele referentie naar een identifier binnen het externe systeem.

  • mime_type
    Momenteel ondersteunen wij HTML en PDF bronnen: text/html of application/pdf

  • meta_data
    Wij gebruiken meta_data om een ‘correcte’ datum van het de bron aan te merken.
    Indien aanwezig lezen wij hier author en date uit.

    Daarnaast heb je hier de vrijheid extra informatie mee te geven aan het document.
    Doel hiervan is bijvoorbeeld maatwerk te ondersteunen binnen externe systemen.

  • title
    De titel van de bron.

  • content
    De inhoud van de bron dat we verwerken en primair gebruiken binnen de kennisbank.


Let op
In het geval van "mime_type": "text/html" verwachten wij zo compleet mogelijke en een valide HTML.
Geef content altijd binnen valide HTML tags:<html><body> ... </body></html>

{
  "data": {
    "external_reference": "scrapedPage:9001",
    "url": "https://www.domein-met-het-nieuwe-zoeken.nl/over-ons",
    "mime_type": "text/html",
    "title": "Over ons",
    "content": "<html><body><p>Hallo wereld!</p></body></html>"
    "meta_data": {
        "date": "2024-12-12T12:00:00+00:00"
    }
  }
}


Endpoints

Creëren van een nieuw document

POST https://{klant}.vragen.ai/api/v1/documents

Voorbeeld Request body:

{
    "data": {
        "type": "documents",
        "attributes": {
            "url": "https://domein-met-het-nieuwe-zoeken.nl",
            "title": "Homepage",
            "content": "<html><body><p>SWIS heeft alles in huis om te ontdekken wat je organisatie nodig heeft om digitaal succesvol te worden. En blijven. Ontdekken wat je echt nodig hebt. Vanuit een succesvolle strategie bedenken en ontwerpen we een oplossing. Meer over ontdekken Maken wat het meest waardevol is. Onze agile teams weten precies hoe je zo’n oplossing maakt. In een slim, snel en soepel proces. Meer over maken. Optimaliseren om succesvol te blijven. Daarvoor moet je aan de knoppen van je product of dienst blijven draaien. Wij helpen je daarbij. Meer over optimaliseren</p></body></html>",
            "external_reference": "foo_1",
            "mime_type": "text/html",
            "meta_data": {
                "author": "SWIS"
            }
        }
    }
}

Voorbeeld Response

{
    "jsonapi": {
        "version": "1.0"
    },
    "links": {
        "self": "https://{klant}.vragen.ai/api/v1/documents/9001"
    },
    "data": {
        "type": "documents",
        "id": "9001",
        "attributes": {
            "external_reference": "foo_1",
            "url": "https://domein-met-het-nieuwe-zoeken.nl",
            "mime_type": "text/html",
            "title": "Homepage",
            "meta_data": {
                "author": "SWIS"
            },
            "content_cleaned": "..." 
        },
        "links": {
            "self": "https://{klant}.vragen.ai/api/v1/documents/9001"
        }
    }
}

Lezen van een bestaand document

GET https://{klant}.vragen.ai/api/vi/documents/{document_id}

Voorbeeld Response (vergelijkbaar met 'Creeren van document'):

{
    "jsonapi": {
        "version": "1.0"
    },
    "links": {
        "self": "https://{klant}.vragen.ai/api/v1/documents/9001"
    },
    "data": {
        "type": "documents",
        "id": "9001",
        "attributes": {
            "external_reference": "foobar_1",
            "url": "https://domein-met-het-nieuwe-zoeken.nl",
            "mime_type": "html",
            "title": "Homepage",
            "meta_data": null,
            "content_cleaned": "This is alle content van de pagina."
        },
        "links": {
            "self": "https://{klant}.vragen.ai/api/v1/documents/9001"
        }
    }
}


Bijwerken van een bestaand document

PATCH https://{klant}.vragen.ai/api/v1/documents/{document_id}

Voorbeeld Request body:

{
    "data": {
        "id": "9001",
        "type": "documents",
        "attributes": {
            "url": "https://domein-met-het-nieuwe-zoeken.nl",
            "external_reference": "foo_1",
            "mime_type": "text/html",
            "title": "Homepage",
            "content": "SWIS heeft alles in huis om te ontdekken wat je organisatie nodig heeft om digitaal succesvol te worden. En blijven. Ontdekken wat je echt nodig hebt. Vanuit een succesvolle strategie bedenken en ontwerpen we een oplossing. Meer over ontdekken Maken wat het meest waardevol is. Onze agile teams weten precies hoe je zo’n oplossing maakt. In een slim, snel en soepel proces. Meer over maken. Optimaliseren om succesvol te blijven. Daarvoor moet je aan de knoppen van je product of dienst blijven draaien. Wij helpen je daarbij. Meer over optimaliseren",
            "meta_data": {
                "author": "SWIS - test"
            }
        }
    }
}

Voorbeeld response:

{
    "jsonapi": {
        "version": "1.0"
    },
    "links": {
        "self": "https://{klant}.vragen.ai/api/v1/documents/9001"
    },
    "data": {
        "type": "documents",
        "id": "9001",
        "attributes": {
            "external_reference": "foo_1",
            "url": "https://domein-met-het-nieuwe-zoeken.nl",
            "mime_type": "text/html",
            "title": "Homepage",
            "meta_data": {
                "author": "SWIS - test"
            },
            "content_cleaned": "This is alle content van de pagina."
        },
        "links": {
            "self": "https://{klant}.vragen.ai/api/v1/documents/9001"
        }
    }
}

Lezen van alle aanwezige documenten

GET https://{klant}.vragen.ai/api/v1/documents

Voorbeeld response body

{
    "meta": {
        "page": {
            "currentPage": 1,
            "from": 1,
            "lastPage": 901,
            "perPage": 10,
            "to": 10,
            "total": 9001
        }
    },
    "jsonapi": {
        "version": "1.0"
    },
    "links": {
        "first": "https://{klant}.vragen.ai/api/v1/documents?page%5Bnumber%5D=1&page%5Bsize%5D=10",
        "last": "https://{klant}.vragen.ai/api/v1/documents?page%5Bnumber%5D=634&page%5Bsize%5D=10",
        "next": "https://{klant}.vragen.ai/api/v1/documents?page%5Bnumber%5D=2&page%5Bsize%5D=10"
    },
    "data": [
        {
            "type": "documents",
            "id": "1",
            "attributes": {
                "external_reference": "scrapedPage:119145",
                "url": "https://www.domein-met-het-nieuwe-zoeken.nl/nieuws",
                "mime_type": "text/html",
                "title": "Actueel | Het Nieuwe Zoeken",
                "meta_data": {
                    "date": "2023-07-19T12:00:00+00:00"
                },
                "content_cleaned": "Vandaag beginnen zoeken wij anno 2024"
            },
            "links": {
                "self": "https://{klant}.vragen.ai/api/v1/documents/1"
            }
        },
        ...
      ]
  }

Het antwoord zal een lijst van documenten bevatten, indien aanwezig. Structuur van deze objecten zijn hetzelfde per document en vergelijkbaar met wanneer je een enkel document opvraagt.

Let op: met de volgende informatie dat je zal terugkrijgen kan je opvolgende verzoeken sturen om verdere informatie op te halen

{
  ... 
  "meta": {
    "page": {
        "currentPage": 1,
        "from": 1,
        "lastPage": 901,
        "perPage": 10,
        "to": 10,
        "total": 9001
    }
  },
  "links": {
      "first": "https://{klant}.vragen.ai/api/v1/documents?page%5Bnumber%5D=1&page%5Bsize%5D=10",
      "last": "https://{klant}.vragen.ai/api/v1/documents?page%5Bnumber%5D=634&page%5Bsize%5D=10",
      "next": "https://{klant}.vragen.ai/api/v1/documents?page%5Bnumber%5D=2&page%5Bsize%5D=10"
  },
  ...
}

 

Verwijderen van een document

DELETE https://{klant}.vragen.ai/api/v1/documents/{document_id}

 

 Support

Aan de hand van bovenstaande informatie en voorbeelden zou je geen problemen moeten ondervinden om een verbinding op te zetten met onze API. Als je nog vragen hebt, neem dan contact op met ons supportteam via support@vragen.ai.