curl --request POST \
--url https://admin-api.gominerva.com/v2/webhooks/screening \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"webhookName": "Test webhook",
"events": [
{
"kind": "profile_status_updated",
"values": [
"potential_match",
"accepted",
"rejected"
]
}
],
"url": "https://your.web.site/path"
}
'import requests
url = "https://admin-api.gominerva.com/v2/webhooks/screening"
payload = {
"webhookName": "Test webhook",
"events": [
{
"kind": "profile_status_updated",
"values": ["potential_match", "accepted", "rejected"]
}
],
"url": "https://your.web.site/path"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
webhookName: 'Test webhook',
events: [
{
kind: 'profile_status_updated',
values: ['potential_match', 'accepted', 'rejected']
}
],
url: 'https://your.web.site/path'
})
};
fetch('https://admin-api.gominerva.com/v2/webhooks/screening', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://admin-api.gominerva.com/v2/webhooks/screening",
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([
'webhookName' => 'Test webhook',
'events' => [
[
'kind' => 'profile_status_updated',
'values' => [
'potential_match',
'accepted',
'rejected'
]
]
],
'url' => 'https://your.web.site/path'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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 := "https://admin-api.gominerva.com/v2/webhooks/screening"
payload := strings.NewReader("{\n \"webhookName\": \"Test webhook\",\n \"events\": [\n {\n \"kind\": \"profile_status_updated\",\n \"values\": [\n \"potential_match\",\n \"accepted\",\n \"rejected\"\n ]\n }\n ],\n \"url\": \"https://your.web.site/path\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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("https://admin-api.gominerva.com/v2/webhooks/screening")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"webhookName\": \"Test webhook\",\n \"events\": [\n {\n \"kind\": \"profile_status_updated\",\n \"values\": [\n \"potential_match\",\n \"accepted\",\n \"rejected\"\n ]\n }\n ],\n \"url\": \"https://your.web.site/path\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://admin-api.gominerva.com/v2/webhooks/screening")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"webhookName\": \"Test webhook\",\n \"events\": [\n {\n \"kind\": \"profile_status_updated\",\n \"values\": [\n \"potential_match\",\n \"accepted\",\n \"rejected\"\n ]\n }\n ],\n \"url\": \"https://your.web.site/path\"\n}"
response = http.request(request)
puts response.read_body{
"status": 200,
"message": "Webhook created successfully",
"result": {
"id": "ecc9b161-e6bf-48e4-816d-b13046a42eaa",
"webhookName": "Test webhook",
"webhookKey": "e7b3b2f0-8e17-40a5-a083-2234c6bc9dab",
"events": [
{
"kind": "profile_status_updated",
"values": [
"potential_match",
"accepted",
"rejected"
]
}
],
"url": "https://your.web.site/path"
}
}{
"status": 400,
"message": "Max allowed screening event webhooks reached. Other screening event webhooks must be deleted first to create any new ones."
}{
"status": 400,
"message": "Bad request",
"code": "VALIDATION_ERROR"
}{
"status": 400,
"message": "Bad request",
"code": "VALIDATION_ERROR"
}Create screening webhook
Creates a new screening webhook and generates its webhook key and unique ID. The response payload contains both the unique ID and the new webhook key. Store the key in a vault or secrets manager so the receiving service can authenticate requests through the “x-webhook-key” header. The webhook key is also returned by GET requests for webhooks, so you can retrieve it again later.
Webhooks support three kinds: screening profile status updates, IDV lifecycle events, and profile onboarding lifecycle events. See the Webhooks reference for payload and delivery details.
Notice: each workspace is allowed a maximum of 10 webhooks by default. More webhooks are available for enterprise customers on request. If the workspace has reached its maximum, review the existing webhooks and delete the unused ones with the Delete Screening Webhook method.
curl --request POST \
--url https://admin-api.gominerva.com/v2/webhooks/screening \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"webhookName": "Test webhook",
"events": [
{
"kind": "profile_status_updated",
"values": [
"potential_match",
"accepted",
"rejected"
]
}
],
"url": "https://your.web.site/path"
}
'import requests
url = "https://admin-api.gominerva.com/v2/webhooks/screening"
payload = {
"webhookName": "Test webhook",
"events": [
{
"kind": "profile_status_updated",
"values": ["potential_match", "accepted", "rejected"]
}
],
"url": "https://your.web.site/path"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
webhookName: 'Test webhook',
events: [
{
kind: 'profile_status_updated',
values: ['potential_match', 'accepted', 'rejected']
}
],
url: 'https://your.web.site/path'
})
};
fetch('https://admin-api.gominerva.com/v2/webhooks/screening', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://admin-api.gominerva.com/v2/webhooks/screening",
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([
'webhookName' => 'Test webhook',
'events' => [
[
'kind' => 'profile_status_updated',
'values' => [
'potential_match',
'accepted',
'rejected'
]
]
],
'url' => 'https://your.web.site/path'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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 := "https://admin-api.gominerva.com/v2/webhooks/screening"
payload := strings.NewReader("{\n \"webhookName\": \"Test webhook\",\n \"events\": [\n {\n \"kind\": \"profile_status_updated\",\n \"values\": [\n \"potential_match\",\n \"accepted\",\n \"rejected\"\n ]\n }\n ],\n \"url\": \"https://your.web.site/path\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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("https://admin-api.gominerva.com/v2/webhooks/screening")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"webhookName\": \"Test webhook\",\n \"events\": [\n {\n \"kind\": \"profile_status_updated\",\n \"values\": [\n \"potential_match\",\n \"accepted\",\n \"rejected\"\n ]\n }\n ],\n \"url\": \"https://your.web.site/path\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://admin-api.gominerva.com/v2/webhooks/screening")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"webhookName\": \"Test webhook\",\n \"events\": [\n {\n \"kind\": \"profile_status_updated\",\n \"values\": [\n \"potential_match\",\n \"accepted\",\n \"rejected\"\n ]\n }\n ],\n \"url\": \"https://your.web.site/path\"\n}"
response = http.request(request)
puts response.read_body{
"status": 200,
"message": "Webhook created successfully",
"result": {
"id": "ecc9b161-e6bf-48e4-816d-b13046a42eaa",
"webhookName": "Test webhook",
"webhookKey": "e7b3b2f0-8e17-40a5-a083-2234c6bc9dab",
"events": [
{
"kind": "profile_status_updated",
"values": [
"potential_match",
"accepted",
"rejected"
]
}
],
"url": "https://your.web.site/path"
}
}{
"status": 400,
"message": "Max allowed screening event webhooks reached. Other screening event webhooks must be deleted first to create any new ones."
}{
"status": 400,
"message": "Bad request",
"code": "VALIDATION_ERROR"
}{
"status": 400,
"message": "Bad request",
"code": "VALIDATION_ERROR"
}Authorizations
Admin API key for authentication. Manage API keys in the Minerva dashboard under Administration > Developers.
Body
Request body for creating a new screening webhook
The name to assign to the webhook. This is for reference purposes, and Minerva echoes it back in the webhook payload together with the webhook unique ID. A system reference ID or other reference code works well here. Use it to tell webhooks apart by environment (dev or prod) or by purpose.
"Test webhook"
The list of events the webhook subscribes to. If you provide more than one event, Minerva treats them as an OR gate: the webhook triggers when the conditions of any event in the array apply. Provide at least one event.
Show child attributes
Show child attributes
The URL that the webhook should POST to when event conditions are met
"https://your.web.site/path"