* Organize existing content differently * Fix broken links * Remove cookie consent popup * edits * Consolidate streaming * Remove agents/streaming * Fix broken links * Edit stream modes * Change titles * Fix titles based on feedback * Move LGP to platform section * Update navigation * Consolidate assistant conceptual guides * docs: Memory consolidation (#5149) * Memory consolidation * Fix broken links * fix links * Fix links * Fix links * General content clean up for memory * fix links * Fix link * fix links * Fix title * Edits based on feedback * Link to memory store
5.0 KiB
Use webhooks
When working with LangGraph Platform, you may want to use webhooks to receive updates after an API call completes. Webhooks are useful for triggering actions in your service once a run has finished processing. To implement this, you need to expose an endpoint that can accept POST requests and pass this endpoint as a webhook parameter in your API request.
Currently, the SDK does not provide built-in support for defining webhook endpoints, but you can specify them manually using API requests.
Supported endpoints
The following API endpoints accept a webhook parameter:
| Operation | HTTP Method | Endpoint |
|---|---|---|
| Create Run | POST |
/thread/{thread_id}/runs |
| Create Thread Cron | POST |
/thread/{thread_id}/runs/crons |
| Stream Run | POST |
/thread/{thread_id}/runs/stream |
| Wait Run | POST |
/thread/{thread_id}/runs/wait |
| Create Cron | POST |
/runs/crons |
| Stream Run Stateless | POST |
/runs/stream |
| Wait Run Stateless | POST |
/runs/wait |
In this guide, we’ll show how to trigger a webhook after streaming a run.
Set up your assistant and thread
Before making API calls, set up your assistant and thread.
=== "Python"
```python
from langgraph_sdk import get_client
client = get_client(url=<DEPLOYMENT_URL>)
assistant_id = "agent"
thread = await client.threads.create()
print(thread)
```
=== "JavaScript"
```js
import { Client } from "@langchain/langgraph-sdk";
const client = new Client({ apiUrl: <DEPLOYMENT_URL> });
const assistantID = "agent";
const thread = await client.threads.create();
console.log(thread);
```
=== "CURL"
```bash
curl --request POST \
--url <DEPLOYMENT_URL>/assistants/search \
--header 'Content-Type: application/json' \
--data '{ "limit": 10, "offset": 0 }' | jq -c 'map(select(.config == null or .config == {})) | .[0]' && \
curl --request POST \
--url <DEPLOYMENT_URL>/threads \
--header 'Content-Type: application/json' \
--data '{}'
```
Example response:
{
"thread_id": "9dde5490-2b67-47c8-aa14-4bfec88af217",
"created_at": "2024-08-30T23:07:38.242730+00:00",
"updated_at": "2024-08-30T23:07:38.242730+00:00",
"metadata": {},
"status": "idle",
"config": {},
"values": null
}
Use a webhook with a graph run
To use a webhook, specify the webhook parameter in your API request. When the run completes, LangGraph Platform sends a POST request to the specified webhook URL.
For example, if your server listens for webhook events at https://my-server.app/my-webhook-endpoint, include this in your request:
=== "Python"
```python
input = { "messages": [{ "role": "user", "content": "Hello!" }] }
async for chunk in client.runs.stream(
thread_id=thread["thread_id"],
assistant_id=assistant_id,
input=input,
stream_mode="events",
webhook="https://my-server.app/my-webhook-endpoint"
):
pass
```
=== "JavaScript"
```js
const input = { messages: [{ role: "human", content: "Hello!" }] };
const streamResponse = client.runs.stream(
thread["thread_id"],
assistantID,
{
input: input,
webhook: "https://my-server.app/my-webhook-endpoint"
}
);
for await (const chunk of streamResponse) {
// Handle stream output
}
```
=== "CURL"
```bash
curl --request POST \
--url <DEPLOYMENT_URL>/threads/<THREAD_ID>/runs/stream \
--header 'Content-Type: application/json' \
--data '{
"assistant_id": <ASSISTANT_ID>,
"input": {"messages": [{"role": "user", "content": "Hello!"}]},
"webhook": "https://my-server.app/my-webhook-endpoint"
}'
```
Webhook payload
LangGraph Platform sends webhook notifications in the format of a Run. See the API Reference for details. The request payload includes run input, configuration, and other metadata in the kwargs field.
Secure webhooks
To ensure only authorized requests hit your webhook endpoint, consider adding a security token as a query parameter:
https://my-server.app/my-webhook-endpoint?token=YOUR_SECRET_TOKEN
Your server should extract and validate this token before processing requests.
Test webhooks
You can test your webhook using online services like:
- Beeceptor – Quickly create a test endpoint and inspect incoming webhook payloads.
- Webhook.site – View, debug, and log incoming webhook requests in real time.
These tools help you verify that LangGraph Platform is correctly triggering and sending webhooks to your service.