cURL
curl \
-X POST 'MEILISEARCH_URL/webhooks' \
-H 'Content-Type: application/json' \
--data-binary '{
"url": "WEBHOOK_TARGET_URL",
"headers": {
"authorization": "SECURITY_KEY",
"referer": "https://example.com"
}
}'import requests
url = "http://localhost:7700/webhooks"
payload = {
"url": "https://your.site/on-tasks-completed",
"headers": { "Authorization": "Bearer a-secret-token" }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
url: 'https://your.site/on-tasks-completed',
headers: {Authorization: 'Bearer a-secret-token'}
})
};
fetch('http://localhost:7700/webhooks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "7700",
CURLOPT_URL => "http://localhost:7700/webhooks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'url' => 'https://your.site/on-tasks-completed',
'headers' => [
'Authorization' => 'Bearer a-secret-token'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "http://localhost:7700/webhooks"
payload := strings.NewReader("{\n \"url\": \"https://your.site/on-tasks-completed\",\n \"headers\": {\n \"Authorization\": \"Bearer a-secret-token\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("http://localhost:7700/webhooks")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"https://your.site/on-tasks-completed\",\n \"headers\": {\n \"Authorization\": \"Bearer a-secret-token\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:7700/webhooks")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"https://your.site/on-tasks-completed\",\n \"headers\": {\n \"Authorization\": \"Bearer a-secret-token\"\n }\n}"
response = http.request(request)
puts response.read_body{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"url": "https://your.site/on-tasks-completed",
"headers": {
"Authorization": "Bearer a-secret-token"
},
"isEditable": true
}{
"message": "The webhook URL is invalid. Expected a valid URL.",
"code": "invalid_webhook_url",
"type": "invalid_request",
"link": "https://docs.meilisearch.com/errors#invalid_webhook_url"
}{
"message": "The Authorization header is missing. It must use the bearer authorization method.",
"code": "missing_authorization_header",
"type": "auth",
"link": "https://docs.meilisearch.com/errors#missing_authorization_header"
}Webhooks
Create webhook
Register a new webhook to receive task completion notifications. You can optionally set custom headers (e.g. for authentication) and configure the callback URL.
POST
/
webhooks
cURL
curl \
-X POST 'MEILISEARCH_URL/webhooks' \
-H 'Content-Type: application/json' \
--data-binary '{
"url": "WEBHOOK_TARGET_URL",
"headers": {
"authorization": "SECURITY_KEY",
"referer": "https://example.com"
}
}'import requests
url = "http://localhost:7700/webhooks"
payload = {
"url": "https://your.site/on-tasks-completed",
"headers": { "Authorization": "Bearer a-secret-token" }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
url: 'https://your.site/on-tasks-completed',
headers: {Authorization: 'Bearer a-secret-token'}
})
};
fetch('http://localhost:7700/webhooks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "7700",
CURLOPT_URL => "http://localhost:7700/webhooks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'url' => 'https://your.site/on-tasks-completed',
'headers' => [
'Authorization' => 'Bearer a-secret-token'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "http://localhost:7700/webhooks"
payload := strings.NewReader("{\n \"url\": \"https://your.site/on-tasks-completed\",\n \"headers\": {\n \"Authorization\": \"Bearer a-secret-token\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("http://localhost:7700/webhooks")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"https://your.site/on-tasks-completed\",\n \"headers\": {\n \"Authorization\": \"Bearer a-secret-token\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:7700/webhooks")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"https://your.site/on-tasks-completed\",\n \"headers\": {\n \"Authorization\": \"Bearer a-secret-token\"\n }\n}"
response = http.request(request)
puts response.read_body{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"url": "https://your.site/on-tasks-completed",
"headers": {
"Authorization": "Bearer a-secret-token"
},
"isEditable": true
}{
"message": "The webhook URL is invalid. Expected a valid URL.",
"code": "invalid_webhook_url",
"type": "invalid_request",
"link": "https://docs.meilisearch.com/errors#invalid_webhook_url"
}{
"message": "The Authorization header is missing. It must use the bearer authorization method.",
"code": "missing_authorization_header",
"type": "auth",
"link": "https://docs.meilisearch.com/errors#missing_authorization_header"
}Authorizations
An API key is a token that you provide when making API calls. Read more about how to secure your project.
Include the API key to the Authorization header, for instance:
-H 'Authorization: Bearer 6436fc5237b0d6e0d64253fbaac21d135012ecf1'
If you use a SDK, ensure you instantiate the client with the API key, for instance with JS SDK:
const client = new MeiliSearch({
host: 'MEILISEARCH_URL',
apiKey: '6436fc5237b0d6e0d64253fbaac21d135012ecf1'
});
Body
application/json
Response
Webhook created successfully.
Webhook object with metadata and redacted authorization headers.
Unique identifier of the webhook.
Whether the webhook can be edited.
URL endpoint to call when tasks complete.
Example:
"https://your.site/on-tasks-completed"
HTTP headers to include in webhook requests.
Show child attributes
Show child attributes
Example:
{ "Authorization": "Bearer a-secret-token" }
Was this page helpful?
⌘I