Bijgewerkt maart 2026 Ontwikkelaarsgids REST API

Dify API Handleiding 2026: AI via REST integreren in je app

De Dify REST API stelt je in staat om elke Dify-app aan te roepen vanuit eigen code — een chatbot insluiten op je website, documentverwerking automatiseren of AI-functies integreren in elk SaaS-product. Deze handleiding behandelt alles: van de API-sleutel tot streaming-antwoorden en zelf-gehoste setups.

Wat is de Dify API?

De Dify API is een REST API waarmee je elke in Dify gemaakte app programmatisch kunt aanroepen — vanuit elke programmeertaal of platform. Zodra je een Dify-app publiceert (chatbot, agent, workflow of completion-app), krijgt die een eigen API-endpoint dat je kunt aanroepen met een geheime sleutel.

De basis-URL voor Dify Cloud is https://api.dify.ai/v1. Bij zelf hosten vervang je die door je eigen domein: https://jouw-server.com/v1.

Typische gebruiksscenario's

Website-chatbot

AI-chat insluiten op elke website zonder het Dify-widget te gebruiken.

Documentautomatisering

PDF's of teksten naar een Dify-workflow sturen en gestructureerde uitvoer ontvangen.

SaaS AI-functies

AI-schrijven, samenvatten of Q&A inbouwen in bestaande producten.

Backend-pipelines

Dify-agents activeren vanuit cronjobs, webhooks of wachtrijverwerkers.

Mobiele apps

Dify aanroepen vanuit iOS- of Android-apps via standaard HTTP.

No-code tools

Dify verbinden met n8n, Make of Zapier via HTTP-verzoek-knooppunten.

Opmerking: Elk Dify-app-type (chatbot, agent, workflow, completion) heeft licht verschillende endpoints. Deze handleiding richt zich op de Chat Messages API, die het meest wordt gebruikt.

API-sleutel aanmaken

Elke Dify-app heeft zijn eigen API-sleutel. Je moet er één aanmaken voor elke app die je via API wilt benaderen. Zo doe je dat:

1

Open je Dify-app in Studio

Ga naar cloud.dify.ai (of je zelf-gehoste URL) en open de app die je via API wilt aanroepen.

2

Klik rechtsboven op "API Access"

Dit opent het API-referentievenster voor precies deze app.

3

Klik op "API Key aanmaken"

Geef het een naam (bijv. "productie" of "test") om het later te herkennen.

4

Kopieer de Secret Key onmiddellijk

De sleutel wordt maar één keer getoond. Sla hem op als omgevingsvariabele — nooit direct in de broncode.

5

Gebruik hem in de Authorization-header

Alle API-verzoeken vereisen deze header: Authorization: Bearer JOUW_API_KEY

Beveiligingswaarschuwing: Stel je API-sleutel nooit bloot in client-side JavaScript of in een publiek repository. Sla hem altijd op als omgevingsvariabele en roep de Dify API altijd aan vanuit de backend-server.

Overzicht van API-endpoints

De Dify API biedt endpoints voor het verzenden van berichten, beheren van gesprekken, uploaden van bestanden en meer. Alle endpoints zijn relatief aan de basis-URL https://api.dify.ai/v1.

Methode Endpoint Beschrijving
POST /chat-messages Chatbericht verzenden en antwoord ontvangen. Ondersteunt blocking en streaming.
POST /completion-messages Prompt verzenden naar een completion-app. Geeft een gegenereerde tekst terug.
POST /files/upload Bestand uploaden (PDF, afbeelding enz.) voor RAG of vision-apps.
GET /conversations Alle gesprekken van een gebruiker weergeven. Gebruik de user-parameter voor filtering.
GET /messages Berichtgeschiedenis van een specifiek gesprek ophalen.
DELETE /conversations/:id Een gesprek en alle berichten permanent verwijderen.
POST /messages/:id/feedbacks Beoordeling (duim omhoog/omlaag) geven voor een specifiek bericht.
GET /parameters Invoerparameters, introductietekst en voorgestelde vragen van de app ophalen.

Je eerste API-aanroep

Laten we een echte API-aanroep doen. Vervang JOUW_API_KEY door je werkelijke sleutel. Het user-veld is een unieke identificator voor de eindgebruiker — gebruik een willekeurige string die deze gebruiker identificeert in jouw systeem.

curl-voorbeeld

curl -X POST 'https://api.dify.ai/v1/chat-messages' \
  -H 'Authorization: Bearer JOUW_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "inputs": {},
    "query": "Hallo! Waarmee kun je me helpen?",
    "response_mode": "blocking",
    "conversation_id": "",
    "user": "gebruiker-123"
  }'

Voorbeeldantwoord

{
  "event": "message",
  "task_id": "abc123",
  "id": "msg_456",
  "message_id": "msg_456",
  "conversation_id": "conv_789",
  "mode": "chat",
  "answer": "Hallo! Ik kan je helpen met vragen, teksten, analyses en veel meer. Wat wil je verkennen?",
  "metadata": { "usage": { "prompt_tokens": 12, "completion_tokens": 22 } },
  "created_at": 1711234567
}

Python-voorbeeld (met requests)

import requests

API_KEY = "jouw_api_key_hier"
BASE_URL = "https://api.dify.ai/v1"

def chat(query, conversation_id="", user="gebruiker-123"):
    response = requests.post(
        f"{BASE_URL}/chat-messages",
        headers={
            "Authorization": f"Bearer {API_KEY}",
            "Content-Type": "application/json",
        },
        json={
            "inputs": {},
            "query": query,
            "response_mode": "blocking",
            "conversation_id": conversation_id,
            "user": user,
        }
    )
    response.raise_for_status()
    return response.json()

# Eerste bericht
result = chat("Wat is Dify?")
print(result["answer"])
conversation_id = result["conversation_id"]

# Vervolgvraag in hetzelfde gesprek
result2 = chat("Kun je dat nader toelichten?", conversation_id=conversation_id)
print(result2["answer"])
Tip: Sla de conversation_id op uit het eerste antwoord en geef die door bij vervolgaanroepen. Zo blijft de gespreksgeschiedenis bewaard en onthoudt de AI wat er gezegd is.

Streaming-antwoorden (SSE)

Streaming maakt het mogelijk om tokens te tonen terwijl ze worden gegenereerd — zoals het tik-effect bij ChatGPT. Dify gebruikt Server-Sent Events (SSE) voor streaming. Stel "response_mode": "streaming" in de request-body in.

Elk event komt aan als een regel met het voorvoegsel data:. De event-typen omvatten message (een token-chunk), message_end (afsluitend bericht met metadata) en error.

Streaming curl-voorbeeld

curl -X POST 'https://api.dify.ai/v1/chat-messages' \
  -H 'Authorization: Bearer JOUW_API_KEY' \
  -H 'Content-Type: application/json' \
  --no-buffer \
  -d '{
    "inputs": {},
    "query": "Schrijf een kort gedicht over AI.",
    "response_mode": "streaming",
    "conversation_id": "",
    "user": "gebruiker-123"
  }'

Python streaming-voorbeeld

import requests
import json

def stream_chat(query, user="gebruiker-123"):
    with requests.post(
        "https://api.dify.ai/v1/chat-messages",
        headers={
            "Authorization": "Bearer JOUW_API_KEY",
            "Content-Type": "application/json",
        },
        json={
            "inputs": {},
            "query": query,
            "response_mode": "streaming",
            "conversation_id": "",
            "user": user,
        },
        stream=True,
    ) as response:
        for line in response.iter_lines():
            if line and line.startswith(b"data: "):
                data = json.loads(line[6:])
                if data.get("event") == "message":
                    print(data["answer"], end="", flush=True)
                elif data.get("event") == "message_end":
                    print()
                    break

stream_chat("Leg kwantumcomputing eenvoudig uit.")

JavaScript / Browser (fetch met ReadableStream)

async function streamChat(query) {
  const response = await fetch("https://api.dify.ai/v1/chat-messages", {
    method: "POST",
    headers: {
      "Authorization": "Bearer JOUW_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      inputs: {},
      query,
      response_mode: "streaming",
      conversation_id: "",
      user: "gebruiker-browser",
    }),
  });

  const reader = response.body.getReader();
  const decoder = new TextDecoder();

  while (true) {
    const { done, value } = await reader.read();
    if (done) break;
    const lines = decoder.decode(value).split("\n");
    for (const line of lines) {
      if (line.startsWith("data: ")) {
        const data = JSON.parse(line.slice(6));
        if (data.event === "message") {
          document.getElementById("uitvoer").textContent += data.answer;
        }
      }
    }
  }
}

streamChat("Wat zijn de voordelen van zelf-gehoste AI?");

Dify API met zelf-gehoste installatie

Als je Dify op je eigen server host, werkt de API precies hetzelfde — je vervangt alleen de basis-URL. Dit is het grote voordeel van zelf hosten: jij beheert de infrastructuur, data blijft op je server en er zijn geen limieten voor berichtkredits.

Dify Cloud

BASE_URL = "https://api.dify.ai/v1"

Zelf gehost

BASE_URL = "https://jouw-server.com/v1"

Al het andere — het formaat van de API-sleutel, request-bodies, antwoordformaat, streaming — blijft identiek. Dit maakt het eenvoudig om te ontwikkelen tegen Dify Cloud en daarna over te stappen naar een zelf-gehoste instantie voor productie door slechts één omgevingsvariabele te wijzigen.

Beste hosting-opties voor API-intensieve workloads

Hetzner VPS (zelfbeheer)

Vanaf €3,79/maand. Beste prijs-kwaliteit. Ideaal voor ontwikkelaars die bekend zijn met Linux.

Hetzner bekijken →

Elestio (Beheerd)

Beheerde Dify-deployment. Automatische updates, back-ups, SSL. Geen serverbeheer nodig.

Elestio bekijken →
SSL vereist: Zorg ervoor dat je zelf-gehoste Dify bereikbaar is via HTTPS. De meeste browsers blokkeren mixed-content-verzoeken van HTTPS-pagina's naar HTTP-API's. Configureer een reverse proxy (Nginx + Let's Encrypt) voor SSL.

Veelgestelde vragen

Hoe krijg ik een Dify API-sleutel?

Open je Dify-app, klik rechtsboven op 'API Access' en maak een nieuwe API-sleutel aan. Kopieer de Secret Key — die wordt maar één keer getoond. Gebruik hem in de Authorization-header als 'Bearer JOUW_KEY'.

Is de Dify API gratis?

De Dify API zelf is gratis — je betaalt alleen voor verbruikte LLM-tokens (OpenAI, Anthropic enz.). Zelf gehoste Dify heeft geen API-kosten. Dify Cloud berekent op basis van berichtkredits.

Kan ik Dify API-antwoorden streamen?

Ja. Stel 'response_mode':'streaming' in de request-body in om Server-Sent Events (SSE) te ontvangen. Zo kun je tokens weergeven terwijl ze worden gegenereerd — zoals bij ChatGPT.

Welke programmeertalen werken met de Dify API?

Elke taal die HTTP-verzoeken ondersteunt: Python, JavaScript/Node.js, PHP, Ruby, Go, Java, C# en meer. Dify biedt officiële SDK's voor Python en Node.js en curl-voorbeelden voor elk endpoint.

Klaar om Dify zelf te hosten?

Haal het maximale uit de Dify API door zelf te hosten: geen kredietlimieten, volledige dataprivacy, eigen domein en dezelfde API-interface. Vergelijk de beste hosting-opties voor jouw behoeften.

Dify hosting-opties vergelijken → Dify Tutorial