Webhooks
https://referalli.com /v1/webhook-endpoints Endpoints with their topics, programs, status (active, paused, disabled), secret-rotation state and failure state. Secrets are never returned.
Auth: an API key with webhooks:read (or full), or a session of any role.
Parameters
limitintegerquerystarting_afterstringquerynext_cursor); returns the items after it. From API version 2026-11-01; ignored under 2026-10-21, where lists are a capped plain array.ending_beforestringquerystarting_after. From API version 2026-11-01; ignored under 2026-10-21, where lists are a capped plain array.created[gte]stringquerycreated[lte]stringqueryreferalli-versionstringheaderx-org-idstringheaderreferalli-modestringheadertest runs a session request against the org's test data. With an API key it must match the key's mode (400 mode_mismatch otherwise). The header name from before the rename is still accepted.cURL
curl -X GET "https://referalli.com/v1/webhook-endpoints?limit=&starting_after=&ending_before=&created%5Bgte%5D=&created%5Blte%5D=" \
-H "referalli-version: <value>" \
-H "x-org-id: <value>" \
-H "referalli-mode: <value>"TypeScript
const res = await fetch('https://referalli.com/v1/webhook-endpoints?limit=&starting_after=&ending_before=&created%5Bgte%5D=&created%5Blte%5D=', {
method: 'GET',
headers: {
'referalli-version': '<value>',
'x-org-id': '<value>',
'referalli-mode': '<value>',
},
});
const data = await res.json();Python
import requests
res = requests.request(
"GET",
"https://referalli.com/v1/webhook-endpoints?limit=&starting_after=&ending_before=&created%5Bgte%5D=&created%5Blte%5D=",
headers={
"referalli-version": "<value>",
"x-org-id": "<value>",
"referalli-mode": "<value>",
},
)
data = res.json()Go
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://referalli.com/v1/webhook-endpoints?limit=&starting_after=&ending_before=&created%5Bgte%5D=&created%5Blte%5D=", nil)
req.Header.Set("referalli-version", "<value>")
req.Header.Set("x-org-id", "<value>")
req.Header.Set("referalli-mode", "<value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}PHP
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://referalli.com/v1/webhook-endpoints?limit=&starting_after=&ending_before=&created%5Bgte%5D=&created%5Blte%5D=');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['referalli-version: <value>', 'x-org-id: <value>', 'referalli-mode: <value>']);
$response = curl_exec($ch);
curl_close($ch);
echo $response;Ruby
require 'net/http'
require 'uri'
uri = URI('https://referalli.com/v1/webhook-endpoints?limit=&starting_after=&ending_before=&created%5Bgte%5D=&created%5Blte%5D=')
req = Net::HTTP::Get.new(uri)
req['referalli-version'] = '<value>'
req['x-org-id'] = '<value>'
req['referalli-mode'] = '<value>'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
http.request(req)
end
puts res.bodyJava
import java.net.URI;
import java.net.http.*;
import java.net.http.HttpRequest.BodyPublishers;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://referalli.com/v1/webhook-endpoints?limit=&starting_after=&ending_before=&created%5Bgte%5D=&created%5Blte%5D="))
.header("referalli-version", "<value>")
.header("x-org-id", "<value>")
.header("referalli-mode", "<value>")
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());Responses
Example
{
"object": "string",
"data": [
{
"id": "string",
"url": "string",
"topics": [
"string"
],
"programIds": [
null
],
"status": "active",
"legacySignature": true,
"rotation": {
"inProgress": true,
"previousSecretExpiresAt": "2024-01-01T00:00:00Z"
},
"failingSince": "2024-01-01T00:00:00Z",
"disabledAt": "2024-01-01T00:00:00Z",
"disabledReason": "string",
"createdAt": "2024-01-01T00:00:00Z"
}
],
"has_more": true,
"next_cursor": "string"
}Schema
objectstringrequireddataWebhookEndpoint[]requiredShow child parameters
idstringrequiredurlstringrequiredtopicsstring[]requiredprogramIdsstring[]requiredstatusstringrequiredlegacySignaturebooleanrequiredrotationobjectrequiredShow child parameters
inProgressbooleanrequiredpreviousSecretExpiresAtstringfailingSincestringrequireddisabledAtstringrequireddisabledReasonstringrequiredcreatedAtstringrequiredhas_morebooleanrequirednext_cursorstringrequirederror.code is one of:Example
{
"error": {
"code": "validation_error",
"message": "the body or query failed validation, an unknown field was sent, the body is not valid json, or a session call has no `x-org-id`",
"details": [
{
"code": "invalid_format",
"path": [
"destinationUrl"
],
"message": "Invalid URL"
}
],
"docs_url": "https://referalli.com/docs/errors-and-limits#validation_error"
}
}{
"error": {
"code": "mode_mismatch",
"message": "the `referalli-mode` header disagrees with the api key's mode",
"docs_url": "https://referalli.com/docs/errors-and-limits#mode_mismatch"
}
}{
"error": {
"code": "bad_request",
"message": "rejected by the http layer before the handler",
"docs_url": "https://referalli.com/docs/errors-and-limits#bad_request"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "unauthorized",
"message": "no credentials, an unknown, revoked or expired api key or session, or a signature that did not verify",
"docs_url": "https://referalli.com/docs/errors-and-limits#unauthorized"
}
}{
"error": {
"code": "step_up_required",
"message": "a partner with two-factor on must send `x-totp-code`",
"docs_url": "https://referalli.com/docs/errors-and-limits#step_up_required"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "forbidden",
"message": "the wrong role, a key without the needed scope (the message names it), not a member, a suspended org, or a publishable key from an origin it does not allow",
"docs_url": "https://referalli.com/docs/errors-and-limits#forbidden"
}
}{
"error": {
"code": "sso_required",
"message": "this organization requires single sign-on",
"docs_url": "https://referalli.com/docs/errors-and-limits#sso_required"
}
}{
"error": {
"code": "access_suspended",
"message": "your identity provider suspended your access and you are the last owner",
"docs_url": "https://referalli.com/docs/errors-and-limits#access_suspended"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "not_found",
"message": "the resource does not exist in this org (ids from other orgs look the same), a referenced id does not exist, a list cursor is not in the list, or the endpoint does not exist",
"docs_url": "https://referalli.com/docs/errors-and-limits#not_found"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "rate_limited",
"message": "an endpoint limit or the per-key quota was exceeded",
"docs_url": "https://referalli.com/docs/errors-and-limits#rate_limited"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "internal_error",
"message": "retry with backoff",
"requestId": "req_8f2c1d4e5a6b7c8d",
"docs_url": "https://referalli.com/docs/errors-and-limits#internal_error"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequiredExample
{
"error": {
"code": "string",
"message": "string",
"details": {},
"requestId": "string",
"docs_url": "string"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequiredhttps://referalli.com /v1/webhook-endpoints Subscribes an HTTPS URL to event topics (default ["*"], every event; see the webhooks section of this document for each topic's payload). programIds limits it to events about those programs (org-wide events such as payouts are then not sent). Deliveries are signed the Standard Webhooks way with the returned secret (whsec_…), shown only here. legacySignature: true also sends the deprecated body-only signature.
Auth: an API key with webhooks:write (or full), or a session with role owner, admin.
Parameters
Idempotency-Keystringheaderidempotent-replayed: true) and nothing runs twice. The same key on a different request is 422 idempotency_key_reused; while the first is still running, 409 idempotency_in_progress.x-org-idstringheaderreferalli-modestringheadertest runs a session request against the org's test data. With an API key it must match the key's mode (400 mode_mismatch otherwise). The header name from before the rename is still accepted.Request body application/json
urlstringrequiredtopicsstring[]legacySignaturebooleanprogramIdsstring[]{
"url": "string",
"topics": [
"*"
],
"legacySignature": false,
"programIds": [
"string"
]
}cURL
curl -X POST "https://referalli.com/v1/webhook-endpoints" \
-H "Idempotency-Key: <value>" \
-H "x-org-id: <value>" \
-H "referalli-mode: <value>" \
-H "Content-Type: application/json" \
-d '{"url":"string","topics":["*"],"legacySignature":false,"programIds":["string"]}'TypeScript
const res = await fetch('https://referalli.com/v1/webhook-endpoints', {
method: 'POST',
headers: {
'Idempotency-Key': '<value>',
'x-org-id': '<value>',
'referalli-mode': '<value>',
'Content-Type': 'application/json',
},
body: JSON.stringify({"url":"string","topics":["*"],"legacySignature":false,"programIds":["string"]}),
});
const data = await res.json();Python
import requests
res = requests.request(
"POST",
"https://referalli.com/v1/webhook-endpoints",
headers={
"Idempotency-Key": "<value>",
"x-org-id": "<value>",
"referalli-mode": "<value>",
"Content-Type": "application/json",
},
json={"url": "string", "topics": ["*"], "legacySignature": False, "programIds": ["string"]},
)
data = res.json()Go
package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
req, _ := http.NewRequest("POST", "https://referalli.com/v1/webhook-endpoints", strings.NewReader(`{"url":"string","topics":["*"],"legacySignature":false,"programIds":["string"]}`))
req.Header.Set("Idempotency-Key", "<value>")
req.Header.Set("x-org-id", "<value>")
req.Header.Set("referalli-mode", "<value>")
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}PHP
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://referalli.com/v1/webhook-endpoints');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Idempotency-Key: <value>', 'x-org-id: <value>', 'referalli-mode: <value>', 'Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"url":"string","topics":["*"],"legacySignature":false,"programIds":["string"]}');
$response = curl_exec($ch);
curl_close($ch);
echo $response;Ruby
require 'net/http'
require 'uri'
uri = URI('https://referalli.com/v1/webhook-endpoints')
req = Net::HTTP::Post.new(uri)
req['Idempotency-Key'] = '<value>'
req['x-org-id'] = '<value>'
req['referalli-mode'] = '<value>'
req['Content-Type'] = 'application/json'
req.body = '{"url":"string","topics":["*"],"legacySignature":false,"programIds":["string"]}'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
http.request(req)
end
puts res.bodyJava
import java.net.URI;
import java.net.http.*;
import java.net.http.HttpRequest.BodyPublishers;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://referalli.com/v1/webhook-endpoints"))
.header("Idempotency-Key", "<value>")
.header("x-org-id", "<value>")
.header("referalli-mode", "<value>")
.header("Content-Type", "application/json")
.method("POST", BodyPublishers.ofString("{\"url\":\"string\",\"topics\":[\"*\"],\"legacySignature\":false,\"programIds\":[\"string\"]}"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());Responses
Example
{
"id": "string",
"url": "string",
"topics": [
"string"
],
"programIds": [
"string"
],
"legacySignature": true,
"secret": "string"
}Schema
idstringrequiredurlstringrequiredtopicsstring[]requiredprogramIdsstring[]requiredlegacySignaturebooleanrequiredsecretstringrequirederror.code is one of:Example
{
"error": {
"code": "validation_error",
"message": "the body or query failed validation, an unknown field was sent, the body is not valid json, or a session call has no `x-org-id`",
"details": [
{
"code": "invalid_format",
"path": [
"destinationUrl"
],
"message": "Invalid URL"
}
],
"docs_url": "https://referalli.com/docs/errors-and-limits#validation_error"
}
}{
"error": {
"code": "mode_mismatch",
"message": "the `referalli-mode` header disagrees with the api key's mode",
"docs_url": "https://referalli.com/docs/errors-and-limits#mode_mismatch"
}
}{
"error": {
"code": "bad_request",
"message": "rejected by the http layer before the handler",
"docs_url": "https://referalli.com/docs/errors-and-limits#bad_request"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "unauthorized",
"message": "no credentials, an unknown, revoked or expired api key or session, or a signature that did not verify",
"docs_url": "https://referalli.com/docs/errors-and-limits#unauthorized"
}
}{
"error": {
"code": "step_up_required",
"message": "a partner with two-factor on must send `x-totp-code`",
"docs_url": "https://referalli.com/docs/errors-and-limits#step_up_required"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "forbidden",
"message": "the wrong role, a key without the needed scope (the message names it), not a member, a suspended org, or a publishable key from an origin it does not allow",
"docs_url": "https://referalli.com/docs/errors-and-limits#forbidden"
}
}{
"error": {
"code": "sso_required",
"message": "this organization requires single sign-on",
"docs_url": "https://referalli.com/docs/errors-and-limits#sso_required"
}
}{
"error": {
"code": "access_suspended",
"message": "your identity provider suspended your access and you are the last owner",
"docs_url": "https://referalli.com/docs/errors-and-limits#access_suspended"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "not_found",
"message": "the resource does not exist in this org (ids from other orgs look the same), a referenced id does not exist, a list cursor is not in the list, or the endpoint does not exist",
"docs_url": "https://referalli.com/docs/errors-and-limits#not_found"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "conflict",
"message": "a unique value is taken, or the action would break a rule (the message says which)",
"docs_url": "https://referalli.com/docs/errors-and-limits#conflict"
}
}{
"error": {
"code": "idempotency_in_progress",
"message": "a request with the same `idempotency-key` is still running",
"docs_url": "https://referalli.com/docs/errors-and-limits#idempotency_in_progress"
}
}{
"error": {
"code": "replay",
"message": "a signed auth-connection call reused an id already received",
"docs_url": "https://referalli.com/docs/errors-and-limits#replay"
}
}{
"error": {
"code": "live_mode_only",
"message": "only changeable in live mode",
"docs_url": "https://referalli.com/docs/errors-and-limits#live_mode_only"
}
}{
"error": {
"code": "test_mode_only",
"message": "only exists in test mode",
"docs_url": "https://referalli.com/docs/errors-and-limits#test_mode_only"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "idempotency_key_reused",
"message": "the `idempotency-key` was used for a different request",
"docs_url": "https://referalli.com/docs/errors-and-limits#idempotency_key_reused"
}
}{
"error": {
"code": "validation_error",
"message": "on the signed auth-connection endpoints",
"docs_url": "https://referalli.com/docs/errors-and-limits#validation_error"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "rate_limited",
"message": "an endpoint limit or the per-key quota was exceeded",
"docs_url": "https://referalli.com/docs/errors-and-limits#rate_limited"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "internal_error",
"message": "retry with backoff",
"requestId": "req_8f2c1d4e5a6b7c8d",
"docs_url": "https://referalli.com/docs/errors-and-limits#internal_error"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequiredExample
{
"error": {
"code": "string",
"message": "string",
"details": {},
"requestId": "string",
"docs_url": "string"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequiredhttps://referalli.com /v1/webhook-endpoints/{id} One endpoint with its status, rotation and failure state.
Auth: an API key with webhooks:read (or full), or a session of any role.
Parameters
idstringpathrequiredx-org-idstringheaderreferalli-modestringheadertest runs a session request against the org's test data. With an API key it must match the key's mode (400 mode_mismatch otherwise). The header name from before the rename is still accepted.cURL
curl -X GET "https://referalli.com/v1/webhook-endpoints/{id}" \
-H "x-org-id: <value>" \
-H "referalli-mode: <value>"TypeScript
const res = await fetch('https://referalli.com/v1/webhook-endpoints/{id}', {
method: 'GET',
headers: {
'x-org-id': '<value>',
'referalli-mode': '<value>',
},
});
const data = await res.json();Python
import requests
res = requests.request(
"GET",
"https://referalli.com/v1/webhook-endpoints/{id}",
headers={
"x-org-id": "<value>",
"referalli-mode": "<value>",
},
)
data = res.json()Go
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://referalli.com/v1/webhook-endpoints/{id}", nil)
req.Header.Set("x-org-id", "<value>")
req.Header.Set("referalli-mode", "<value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}PHP
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://referalli.com/v1/webhook-endpoints/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['x-org-id: <value>', 'referalli-mode: <value>']);
$response = curl_exec($ch);
curl_close($ch);
echo $response;Ruby
require 'net/http'
require 'uri'
uri = URI('https://referalli.com/v1/webhook-endpoints/{id}')
req = Net::HTTP::Get.new(uri)
req['x-org-id'] = '<value>'
req['referalli-mode'] = '<value>'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
http.request(req)
end
puts res.bodyJava
import java.net.URI;
import java.net.http.*;
import java.net.http.HttpRequest.BodyPublishers;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://referalli.com/v1/webhook-endpoints/{id}"))
.header("x-org-id", "<value>")
.header("referalli-mode", "<value>")
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());Responses
Example
{
"id": "string",
"url": "string",
"topics": [
"string"
],
"programIds": [
"string"
],
"status": "active",
"legacySignature": true,
"rotation": {
"inProgress": true,
"previousSecretExpiresAt": "2024-01-01T00:00:00Z"
},
"failingSince": "2024-01-01T00:00:00Z",
"disabledAt": "2024-01-01T00:00:00Z",
"disabledReason": "string",
"createdAt": "2024-01-01T00:00:00Z"
}Schema
idstringrequiredurlstringrequiredtopicsstring[]requiredprogramIdsstring[]requiredstatusstringrequiredlegacySignaturebooleanrequiredrotationobjectrequiredShow child parameters
inProgressbooleanrequiredpreviousSecretExpiresAtstringfailingSincestringrequireddisabledAtstringrequireddisabledReasonstringrequiredcreatedAtstringrequirederror.code is one of:Example
{
"error": {
"code": "validation_error",
"message": "the body or query failed validation, an unknown field was sent, the body is not valid json, or a session call has no `x-org-id`",
"details": [
{
"code": "invalid_format",
"path": [
"destinationUrl"
],
"message": "Invalid URL"
}
],
"docs_url": "https://referalli.com/docs/errors-and-limits#validation_error"
}
}{
"error": {
"code": "mode_mismatch",
"message": "the `referalli-mode` header disagrees with the api key's mode",
"docs_url": "https://referalli.com/docs/errors-and-limits#mode_mismatch"
}
}{
"error": {
"code": "bad_request",
"message": "rejected by the http layer before the handler",
"docs_url": "https://referalli.com/docs/errors-and-limits#bad_request"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "unauthorized",
"message": "no credentials, an unknown, revoked or expired api key or session, or a signature that did not verify",
"docs_url": "https://referalli.com/docs/errors-and-limits#unauthorized"
}
}{
"error": {
"code": "step_up_required",
"message": "a partner with two-factor on must send `x-totp-code`",
"docs_url": "https://referalli.com/docs/errors-and-limits#step_up_required"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "forbidden",
"message": "the wrong role, a key without the needed scope (the message names it), not a member, a suspended org, or a publishable key from an origin it does not allow",
"docs_url": "https://referalli.com/docs/errors-and-limits#forbidden"
}
}{
"error": {
"code": "sso_required",
"message": "this organization requires single sign-on",
"docs_url": "https://referalli.com/docs/errors-and-limits#sso_required"
}
}{
"error": {
"code": "access_suspended",
"message": "your identity provider suspended your access and you are the last owner",
"docs_url": "https://referalli.com/docs/errors-and-limits#access_suspended"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "not_found",
"message": "the resource does not exist in this org (ids from other orgs look the same), a referenced id does not exist, a list cursor is not in the list, or the endpoint does not exist",
"docs_url": "https://referalli.com/docs/errors-and-limits#not_found"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "rate_limited",
"message": "an endpoint limit or the per-key quota was exceeded",
"docs_url": "https://referalli.com/docs/errors-and-limits#rate_limited"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "internal_error",
"message": "retry with backoff",
"requestId": "req_8f2c1d4e5a6b7c8d",
"docs_url": "https://referalli.com/docs/errors-and-limits#internal_error"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequiredExample
{
"error": {
"code": "string",
"message": "string",
"details": {},
"requestId": "string",
"docs_url": "string"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequiredhttps://referalli.com /v1/webhook-endpoints/{id} Removes the endpoint and its delivery history. Audited.
Auth: an API key with webhooks:write (or full), or a session with role owner, admin.
Parameters
idstringpathrequiredIdempotency-Keystringheaderidempotent-replayed: true) and nothing runs twice. The same key on a different request is 422 idempotency_key_reused; while the first is still running, 409 idempotency_in_progress.x-org-idstringheaderreferalli-modestringheadertest runs a session request against the org's test data. With an API key it must match the key's mode (400 mode_mismatch otherwise). The header name from before the rename is still accepted.cURL
curl -X DELETE "https://referalli.com/v1/webhook-endpoints/{id}" \
-H "Idempotency-Key: <value>" \
-H "x-org-id: <value>" \
-H "referalli-mode: <value>"TypeScript
const res = await fetch('https://referalli.com/v1/webhook-endpoints/{id}', {
method: 'DELETE',
headers: {
'Idempotency-Key': '<value>',
'x-org-id': '<value>',
'referalli-mode': '<value>',
},
});
const data = await res.json();Python
import requests
res = requests.request(
"DELETE",
"https://referalli.com/v1/webhook-endpoints/{id}",
headers={
"Idempotency-Key": "<value>",
"x-org-id": "<value>",
"referalli-mode": "<value>",
},
)
data = res.json()Go
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("DELETE", "https://referalli.com/v1/webhook-endpoints/{id}", nil)
req.Header.Set("Idempotency-Key", "<value>")
req.Header.Set("x-org-id", "<value>")
req.Header.Set("referalli-mode", "<value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}PHP
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://referalli.com/v1/webhook-endpoints/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Idempotency-Key: <value>', 'x-org-id: <value>', 'referalli-mode: <value>']);
$response = curl_exec($ch);
curl_close($ch);
echo $response;Ruby
require 'net/http'
require 'uri'
uri = URI('https://referalli.com/v1/webhook-endpoints/{id}')
req = Net::HTTP::Delete.new(uri)
req['Idempotency-Key'] = '<value>'
req['x-org-id'] = '<value>'
req['referalli-mode'] = '<value>'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
http.request(req)
end
puts res.bodyJava
import java.net.URI;
import java.net.http.*;
import java.net.http.HttpRequest.BodyPublishers;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://referalli.com/v1/webhook-endpoints/{id}"))
.header("Idempotency-Key", "<value>")
.header("x-org-id", "<value>")
.header("referalli-mode", "<value>")
.method("DELETE", BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());Responses
Example
{
"ok": true
}Schema
okbooleanrequirederror.code is one of:Example
{
"error": {
"code": "validation_error",
"message": "the body or query failed validation, an unknown field was sent, the body is not valid json, or a session call has no `x-org-id`",
"details": [
{
"code": "invalid_format",
"path": [
"destinationUrl"
],
"message": "Invalid URL"
}
],
"docs_url": "https://referalli.com/docs/errors-and-limits#validation_error"
}
}{
"error": {
"code": "mode_mismatch",
"message": "the `referalli-mode` header disagrees with the api key's mode",
"docs_url": "https://referalli.com/docs/errors-and-limits#mode_mismatch"
}
}{
"error": {
"code": "bad_request",
"message": "rejected by the http layer before the handler",
"docs_url": "https://referalli.com/docs/errors-and-limits#bad_request"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "unauthorized",
"message": "no credentials, an unknown, revoked or expired api key or session, or a signature that did not verify",
"docs_url": "https://referalli.com/docs/errors-and-limits#unauthorized"
}
}{
"error": {
"code": "step_up_required",
"message": "a partner with two-factor on must send `x-totp-code`",
"docs_url": "https://referalli.com/docs/errors-and-limits#step_up_required"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "forbidden",
"message": "the wrong role, a key without the needed scope (the message names it), not a member, a suspended org, or a publishable key from an origin it does not allow",
"docs_url": "https://referalli.com/docs/errors-and-limits#forbidden"
}
}{
"error": {
"code": "sso_required",
"message": "this organization requires single sign-on",
"docs_url": "https://referalli.com/docs/errors-and-limits#sso_required"
}
}{
"error": {
"code": "access_suspended",
"message": "your identity provider suspended your access and you are the last owner",
"docs_url": "https://referalli.com/docs/errors-and-limits#access_suspended"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "not_found",
"message": "the resource does not exist in this org (ids from other orgs look the same), a referenced id does not exist, a list cursor is not in the list, or the endpoint does not exist",
"docs_url": "https://referalli.com/docs/errors-and-limits#not_found"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "conflict",
"message": "a unique value is taken, or the action would break a rule (the message says which)",
"docs_url": "https://referalli.com/docs/errors-and-limits#conflict"
}
}{
"error": {
"code": "idempotency_in_progress",
"message": "a request with the same `idempotency-key` is still running",
"docs_url": "https://referalli.com/docs/errors-and-limits#idempotency_in_progress"
}
}{
"error": {
"code": "replay",
"message": "a signed auth-connection call reused an id already received",
"docs_url": "https://referalli.com/docs/errors-and-limits#replay"
}
}{
"error": {
"code": "live_mode_only",
"message": "only changeable in live mode",
"docs_url": "https://referalli.com/docs/errors-and-limits#live_mode_only"
}
}{
"error": {
"code": "test_mode_only",
"message": "only exists in test mode",
"docs_url": "https://referalli.com/docs/errors-and-limits#test_mode_only"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "idempotency_key_reused",
"message": "the `idempotency-key` was used for a different request",
"docs_url": "https://referalli.com/docs/errors-and-limits#idempotency_key_reused"
}
}{
"error": {
"code": "validation_error",
"message": "on the signed auth-connection endpoints",
"docs_url": "https://referalli.com/docs/errors-and-limits#validation_error"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "rate_limited",
"message": "an endpoint limit or the per-key quota was exceeded",
"docs_url": "https://referalli.com/docs/errors-and-limits#rate_limited"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "internal_error",
"message": "retry with backoff",
"requestId": "req_8f2c1d4e5a6b7c8d",
"docs_url": "https://referalli.com/docs/errors-and-limits#internal_error"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequiredExample
{
"error": {
"code": "string",
"message": "string",
"details": {},
"requestId": "string",
"docs_url": "string"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequiredhttps://referalli.com /v1/webhook-endpoints/{id} Changes the URL, topics, programs (null or [] for every program) or legacy signature, or pauses it (status: "paused", deliveries held). Setting active re-enables a paused or auto-disabled endpoint: held deliveries resume and the failure clock starts over. Audited.
Auth: an API key with webhooks:write (or full), or a session with role owner, admin.
Parameters
idstringpathrequiredIdempotency-Keystringheaderidempotent-replayed: true) and nothing runs twice. The same key on a different request is 422 idempotency_key_reused; while the first is still running, 409 idempotency_in_progress.x-org-idstringheaderreferalli-modestringheadertest runs a session request against the org's test data. With an API key it must match the key's mode (400 mode_mismatch otherwise). The header name from before the rename is still accepted.Request body application/json
statusstringurlstringtopicsstring[]legacySignaturebooleanprogramIdsstring[]{
"status": "active",
"url": "string",
"topics": [
"string"
],
"legacySignature": true,
"programIds": [
"string"
]
}cURL
curl -X PATCH "https://referalli.com/v1/webhook-endpoints/{id}" \
-H "Idempotency-Key: <value>" \
-H "x-org-id: <value>" \
-H "referalli-mode: <value>" \
-H "Content-Type: application/json" \
-d '{"status":"active","url":"string","topics":["string"],"legacySignature":true,"programIds":["string"]}'TypeScript
const res = await fetch('https://referalli.com/v1/webhook-endpoints/{id}', {
method: 'PATCH',
headers: {
'Idempotency-Key': '<value>',
'x-org-id': '<value>',
'referalli-mode': '<value>',
'Content-Type': 'application/json',
},
body: JSON.stringify({"status":"active","url":"string","topics":["string"],"legacySignature":true,"programIds":["string"]}),
});
const data = await res.json();Python
import requests
res = requests.request(
"PATCH",
"https://referalli.com/v1/webhook-endpoints/{id}",
headers={
"Idempotency-Key": "<value>",
"x-org-id": "<value>",
"referalli-mode": "<value>",
"Content-Type": "application/json",
},
json={"status": "active", "url": "string", "topics": ["string"], "legacySignature": True, "programIds": ["string"]},
)
data = res.json()Go
package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
req, _ := http.NewRequest("PATCH", "https://referalli.com/v1/webhook-endpoints/{id}", strings.NewReader(`{"status":"active","url":"string","topics":["string"],"legacySignature":true,"programIds":["string"]}`))
req.Header.Set("Idempotency-Key", "<value>")
req.Header.Set("x-org-id", "<value>")
req.Header.Set("referalli-mode", "<value>")
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}PHP
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://referalli.com/v1/webhook-endpoints/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Idempotency-Key: <value>', 'x-org-id: <value>', 'referalli-mode: <value>', 'Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"status":"active","url":"string","topics":["string"],"legacySignature":true,"programIds":["string"]}');
$response = curl_exec($ch);
curl_close($ch);
echo $response;Ruby
require 'net/http'
require 'uri'
uri = URI('https://referalli.com/v1/webhook-endpoints/{id}')
req = Net::HTTP::Patch.new(uri)
req['Idempotency-Key'] = '<value>'
req['x-org-id'] = '<value>'
req['referalli-mode'] = '<value>'
req['Content-Type'] = 'application/json'
req.body = '{"status":"active","url":"string","topics":["string"],"legacySignature":true,"programIds":["string"]}'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
http.request(req)
end
puts res.bodyJava
import java.net.URI;
import java.net.http.*;
import java.net.http.HttpRequest.BodyPublishers;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://referalli.com/v1/webhook-endpoints/{id}"))
.header("Idempotency-Key", "<value>")
.header("x-org-id", "<value>")
.header("referalli-mode", "<value>")
.header("Content-Type", "application/json")
.method("PATCH", BodyPublishers.ofString("{\"status\":\"active\",\"url\":\"string\",\"topics\":[\"string\"],\"legacySignature\":true,\"programIds\":[\"string\"]}"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());Responses
Example
{
"id": "string",
"url": "string",
"topics": [
"string"
],
"programIds": [
"string"
],
"status": "active",
"legacySignature": true,
"rotation": {
"inProgress": true,
"previousSecretExpiresAt": "2024-01-01T00:00:00Z"
},
"failingSince": "2024-01-01T00:00:00Z",
"disabledAt": "2024-01-01T00:00:00Z",
"disabledReason": "string",
"createdAt": "2024-01-01T00:00:00Z"
}Schema
idstringrequiredurlstringrequiredtopicsstring[]requiredprogramIdsstring[]requiredstatusstringrequiredlegacySignaturebooleanrequiredrotationobjectrequiredShow child parameters
inProgressbooleanrequiredpreviousSecretExpiresAtstringfailingSincestringrequireddisabledAtstringrequireddisabledReasonstringrequiredcreatedAtstringrequirederror.code is one of:Example
{
"error": {
"code": "validation_error",
"message": "the body or query failed validation, an unknown field was sent, the body is not valid json, or a session call has no `x-org-id`",
"details": [
{
"code": "invalid_format",
"path": [
"destinationUrl"
],
"message": "Invalid URL"
}
],
"docs_url": "https://referalli.com/docs/errors-and-limits#validation_error"
}
}{
"error": {
"code": "mode_mismatch",
"message": "the `referalli-mode` header disagrees with the api key's mode",
"docs_url": "https://referalli.com/docs/errors-and-limits#mode_mismatch"
}
}{
"error": {
"code": "bad_request",
"message": "rejected by the http layer before the handler",
"docs_url": "https://referalli.com/docs/errors-and-limits#bad_request"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "unauthorized",
"message": "no credentials, an unknown, revoked or expired api key or session, or a signature that did not verify",
"docs_url": "https://referalli.com/docs/errors-and-limits#unauthorized"
}
}{
"error": {
"code": "step_up_required",
"message": "a partner with two-factor on must send `x-totp-code`",
"docs_url": "https://referalli.com/docs/errors-and-limits#step_up_required"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "forbidden",
"message": "the wrong role, a key without the needed scope (the message names it), not a member, a suspended org, or a publishable key from an origin it does not allow",
"docs_url": "https://referalli.com/docs/errors-and-limits#forbidden"
}
}{
"error": {
"code": "sso_required",
"message": "this organization requires single sign-on",
"docs_url": "https://referalli.com/docs/errors-and-limits#sso_required"
}
}{
"error": {
"code": "access_suspended",
"message": "your identity provider suspended your access and you are the last owner",
"docs_url": "https://referalli.com/docs/errors-and-limits#access_suspended"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "not_found",
"message": "the resource does not exist in this org (ids from other orgs look the same), a referenced id does not exist, a list cursor is not in the list, or the endpoint does not exist",
"docs_url": "https://referalli.com/docs/errors-and-limits#not_found"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "conflict",
"message": "a unique value is taken, or the action would break a rule (the message says which)",
"docs_url": "https://referalli.com/docs/errors-and-limits#conflict"
}
}{
"error": {
"code": "idempotency_in_progress",
"message": "a request with the same `idempotency-key` is still running",
"docs_url": "https://referalli.com/docs/errors-and-limits#idempotency_in_progress"
}
}{
"error": {
"code": "replay",
"message": "a signed auth-connection call reused an id already received",
"docs_url": "https://referalli.com/docs/errors-and-limits#replay"
}
}{
"error": {
"code": "live_mode_only",
"message": "only changeable in live mode",
"docs_url": "https://referalli.com/docs/errors-and-limits#live_mode_only"
}
}{
"error": {
"code": "test_mode_only",
"message": "only exists in test mode",
"docs_url": "https://referalli.com/docs/errors-and-limits#test_mode_only"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "idempotency_key_reused",
"message": "the `idempotency-key` was used for a different request",
"docs_url": "https://referalli.com/docs/errors-and-limits#idempotency_key_reused"
}
}{
"error": {
"code": "validation_error",
"message": "on the signed auth-connection endpoints",
"docs_url": "https://referalli.com/docs/errors-and-limits#validation_error"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "rate_limited",
"message": "an endpoint limit or the per-key quota was exceeded",
"docs_url": "https://referalli.com/docs/errors-and-limits#rate_limited"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "internal_error",
"message": "retry with backoff",
"requestId": "req_8f2c1d4e5a6b7c8d",
"docs_url": "https://referalli.com/docs/errors-and-limits#internal_error"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequiredExample
{
"error": {
"code": "string",
"message": "string",
"details": {},
"requestId": "string",
"docs_url": "string"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequiredhttps://referalli.com /v1/webhook-endpoints/{id}/rotate-secret Issues a new signing secret, returned once. For 24 hours (previousSecretExpiresAt) every delivery carries a signature from each secret, so receivers can switch without dropping any. Audited.
Auth: an API key with webhooks:write (or full), or a session with role owner, admin.
Parameters
idstringpathrequiredIdempotency-Keystringheaderidempotent-replayed: true) and nothing runs twice. The same key on a different request is 422 idempotency_key_reused; while the first is still running, 409 idempotency_in_progress.x-org-idstringheaderreferalli-modestringheadertest runs a session request against the org's test data. With an API key it must match the key's mode (400 mode_mismatch otherwise). The header name from before the rename is still accepted.cURL
curl -X POST "https://referalli.com/v1/webhook-endpoints/{id}/rotate-secret" \
-H "Idempotency-Key: <value>" \
-H "x-org-id: <value>" \
-H "referalli-mode: <value>"TypeScript
const res = await fetch('https://referalli.com/v1/webhook-endpoints/{id}/rotate-secret', {
method: 'POST',
headers: {
'Idempotency-Key': '<value>',
'x-org-id': '<value>',
'referalli-mode': '<value>',
},
});
const data = await res.json();Python
import requests
res = requests.request(
"POST",
"https://referalli.com/v1/webhook-endpoints/{id}/rotate-secret",
headers={
"Idempotency-Key": "<value>",
"x-org-id": "<value>",
"referalli-mode": "<value>",
},
)
data = res.json()Go
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("POST", "https://referalli.com/v1/webhook-endpoints/{id}/rotate-secret", nil)
req.Header.Set("Idempotency-Key", "<value>")
req.Header.Set("x-org-id", "<value>")
req.Header.Set("referalli-mode", "<value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}PHP
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://referalli.com/v1/webhook-endpoints/{id}/rotate-secret');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Idempotency-Key: <value>', 'x-org-id: <value>', 'referalli-mode: <value>']);
$response = curl_exec($ch);
curl_close($ch);
echo $response;Ruby
require 'net/http'
require 'uri'
uri = URI('https://referalli.com/v1/webhook-endpoints/{id}/rotate-secret')
req = Net::HTTP::Post.new(uri)
req['Idempotency-Key'] = '<value>'
req['x-org-id'] = '<value>'
req['referalli-mode'] = '<value>'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
http.request(req)
end
puts res.bodyJava
import java.net.URI;
import java.net.http.*;
import java.net.http.HttpRequest.BodyPublishers;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://referalli.com/v1/webhook-endpoints/{id}/rotate-secret"))
.header("Idempotency-Key", "<value>")
.header("x-org-id", "<value>")
.header("referalli-mode", "<value>")
.method("POST", BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());Responses
Example
{
"id": "string",
"secret": "string",
"previousSecretExpiresAt": "2024-01-01T00:00:00Z"
}Schema
idstringrequiredsecretstringrequiredpreviousSecretExpiresAtstringrequirederror.code is one of:Example
{
"error": {
"code": "validation_error",
"message": "the body or query failed validation, an unknown field was sent, the body is not valid json, or a session call has no `x-org-id`",
"details": [
{
"code": "invalid_format",
"path": [
"destinationUrl"
],
"message": "Invalid URL"
}
],
"docs_url": "https://referalli.com/docs/errors-and-limits#validation_error"
}
}{
"error": {
"code": "mode_mismatch",
"message": "the `referalli-mode` header disagrees with the api key's mode",
"docs_url": "https://referalli.com/docs/errors-and-limits#mode_mismatch"
}
}{
"error": {
"code": "bad_request",
"message": "rejected by the http layer before the handler",
"docs_url": "https://referalli.com/docs/errors-and-limits#bad_request"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "unauthorized",
"message": "no credentials, an unknown, revoked or expired api key or session, or a signature that did not verify",
"docs_url": "https://referalli.com/docs/errors-and-limits#unauthorized"
}
}{
"error": {
"code": "step_up_required",
"message": "a partner with two-factor on must send `x-totp-code`",
"docs_url": "https://referalli.com/docs/errors-and-limits#step_up_required"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "forbidden",
"message": "the wrong role, a key without the needed scope (the message names it), not a member, a suspended org, or a publishable key from an origin it does not allow",
"docs_url": "https://referalli.com/docs/errors-and-limits#forbidden"
}
}{
"error": {
"code": "sso_required",
"message": "this organization requires single sign-on",
"docs_url": "https://referalli.com/docs/errors-and-limits#sso_required"
}
}{
"error": {
"code": "access_suspended",
"message": "your identity provider suspended your access and you are the last owner",
"docs_url": "https://referalli.com/docs/errors-and-limits#access_suspended"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "not_found",
"message": "the resource does not exist in this org (ids from other orgs look the same), a referenced id does not exist, a list cursor is not in the list, or the endpoint does not exist",
"docs_url": "https://referalli.com/docs/errors-and-limits#not_found"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "conflict",
"message": "a unique value is taken, or the action would break a rule (the message says which)",
"docs_url": "https://referalli.com/docs/errors-and-limits#conflict"
}
}{
"error": {
"code": "idempotency_in_progress",
"message": "a request with the same `idempotency-key` is still running",
"docs_url": "https://referalli.com/docs/errors-and-limits#idempotency_in_progress"
}
}{
"error": {
"code": "replay",
"message": "a signed auth-connection call reused an id already received",
"docs_url": "https://referalli.com/docs/errors-and-limits#replay"
}
}{
"error": {
"code": "live_mode_only",
"message": "only changeable in live mode",
"docs_url": "https://referalli.com/docs/errors-and-limits#live_mode_only"
}
}{
"error": {
"code": "test_mode_only",
"message": "only exists in test mode",
"docs_url": "https://referalli.com/docs/errors-and-limits#test_mode_only"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "idempotency_key_reused",
"message": "the `idempotency-key` was used for a different request",
"docs_url": "https://referalli.com/docs/errors-and-limits#idempotency_key_reused"
}
}{
"error": {
"code": "validation_error",
"message": "on the signed auth-connection endpoints",
"docs_url": "https://referalli.com/docs/errors-and-limits#validation_error"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "rate_limited",
"message": "an endpoint limit or the per-key quota was exceeded",
"docs_url": "https://referalli.com/docs/errors-and-limits#rate_limited"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "internal_error",
"message": "retry with backoff",
"requestId": "req_8f2c1d4e5a6b7c8d",
"docs_url": "https://referalli.com/docs/errors-and-limits#internal_error"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequiredExample
{
"error": {
"code": "string",
"message": "string",
"details": {},
"requestId": "string",
"docs_url": "string"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequiredhttps://referalli.com /v1/webhook-deliveries Deliveries to every endpoint, newest first: topic, status (pending, delivered, failed), attempts, the last response code and, while pending, when the next attempt is. Filter with endpointId.
Auth: an API key with webhooks:read (or full), or a session of any role.
Parameters
endpointIdstringquerylimitintegerquerystarting_afterstringquerynext_cursor); returns the items after it. From API version 2026-11-01; ignored under 2026-10-21, where lists are a capped plain array.ending_beforestringquerystarting_after. From API version 2026-11-01; ignored under 2026-10-21, where lists are a capped plain array.created[gte]stringquerycreated[lte]stringqueryreferalli-versionstringheaderx-org-idstringheaderreferalli-modestringheadertest runs a session request against the org's test data. With an API key it must match the key's mode (400 mode_mismatch otherwise). The header name from before the rename is still accepted.cURL
curl -X GET "https://referalli.com/v1/webhook-deliveries?endpointId=&limit=&starting_after=&ending_before=&created%5Bgte%5D=&created%5Blte%5D=" \
-H "referalli-version: <value>" \
-H "x-org-id: <value>" \
-H "referalli-mode: <value>"TypeScript
const res = await fetch('https://referalli.com/v1/webhook-deliveries?endpointId=&limit=&starting_after=&ending_before=&created%5Bgte%5D=&created%5Blte%5D=', {
method: 'GET',
headers: {
'referalli-version': '<value>',
'x-org-id': '<value>',
'referalli-mode': '<value>',
},
});
const data = await res.json();Python
import requests
res = requests.request(
"GET",
"https://referalli.com/v1/webhook-deliveries?endpointId=&limit=&starting_after=&ending_before=&created%5Bgte%5D=&created%5Blte%5D=",
headers={
"referalli-version": "<value>",
"x-org-id": "<value>",
"referalli-mode": "<value>",
},
)
data = res.json()Go
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://referalli.com/v1/webhook-deliveries?endpointId=&limit=&starting_after=&ending_before=&created%5Bgte%5D=&created%5Blte%5D=", nil)
req.Header.Set("referalli-version", "<value>")
req.Header.Set("x-org-id", "<value>")
req.Header.Set("referalli-mode", "<value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}PHP
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://referalli.com/v1/webhook-deliveries?endpointId=&limit=&starting_after=&ending_before=&created%5Bgte%5D=&created%5Blte%5D=');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['referalli-version: <value>', 'x-org-id: <value>', 'referalli-mode: <value>']);
$response = curl_exec($ch);
curl_close($ch);
echo $response;Ruby
require 'net/http'
require 'uri'
uri = URI('https://referalli.com/v1/webhook-deliveries?endpointId=&limit=&starting_after=&ending_before=&created%5Bgte%5D=&created%5Blte%5D=')
req = Net::HTTP::Get.new(uri)
req['referalli-version'] = '<value>'
req['x-org-id'] = '<value>'
req['referalli-mode'] = '<value>'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
http.request(req)
end
puts res.bodyJava
import java.net.URI;
import java.net.http.*;
import java.net.http.HttpRequest.BodyPublishers;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://referalli.com/v1/webhook-deliveries?endpointId=&limit=&starting_after=&ending_before=&created%5Bgte%5D=&created%5Blte%5D="))
.header("referalli-version", "<value>")
.header("x-org-id", "<value>")
.header("referalli-mode", "<value>")
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());Responses
Example
{
"object": "string",
"data": [
{
"id": "string",
"endpointId": "string",
"topic": "string",
"status": "string",
"attempts": 0,
"lastStatusCode": 0,
"lastAttemptAt": "2024-01-01T00:00:00Z",
"nextAt": "2024-01-01T00:00:00Z",
"createdAt": "2024-01-01T00:00:00Z"
}
],
"has_more": true,
"next_cursor": "string"
}Schema
objectstringrequireddataWebhookDelivery[]requiredShow child parameters
idstringrequiredendpointIdstringrequiredtopicstringrequiredstatusstringrequiredattemptsintegerrequiredlastStatusCodeintegerrequiredlastAttemptAtstringrequirednextAtstringrequiredcreatedAtstringrequiredhas_morebooleanrequirednext_cursorstringrequirederror.code is one of:Example
{
"error": {
"code": "validation_error",
"message": "the body or query failed validation, an unknown field was sent, the body is not valid json, or a session call has no `x-org-id`",
"details": [
{
"code": "invalid_format",
"path": [
"destinationUrl"
],
"message": "Invalid URL"
}
],
"docs_url": "https://referalli.com/docs/errors-and-limits#validation_error"
}
}{
"error": {
"code": "mode_mismatch",
"message": "the `referalli-mode` header disagrees with the api key's mode",
"docs_url": "https://referalli.com/docs/errors-and-limits#mode_mismatch"
}
}{
"error": {
"code": "bad_request",
"message": "rejected by the http layer before the handler",
"docs_url": "https://referalli.com/docs/errors-and-limits#bad_request"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "unauthorized",
"message": "no credentials, an unknown, revoked or expired api key or session, or a signature that did not verify",
"docs_url": "https://referalli.com/docs/errors-and-limits#unauthorized"
}
}{
"error": {
"code": "step_up_required",
"message": "a partner with two-factor on must send `x-totp-code`",
"docs_url": "https://referalli.com/docs/errors-and-limits#step_up_required"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "forbidden",
"message": "the wrong role, a key without the needed scope (the message names it), not a member, a suspended org, or a publishable key from an origin it does not allow",
"docs_url": "https://referalli.com/docs/errors-and-limits#forbidden"
}
}{
"error": {
"code": "sso_required",
"message": "this organization requires single sign-on",
"docs_url": "https://referalli.com/docs/errors-and-limits#sso_required"
}
}{
"error": {
"code": "access_suspended",
"message": "your identity provider suspended your access and you are the last owner",
"docs_url": "https://referalli.com/docs/errors-and-limits#access_suspended"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "not_found",
"message": "the resource does not exist in this org (ids from other orgs look the same), a referenced id does not exist, a list cursor is not in the list, or the endpoint does not exist",
"docs_url": "https://referalli.com/docs/errors-and-limits#not_found"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "rate_limited",
"message": "an endpoint limit or the per-key quota was exceeded",
"docs_url": "https://referalli.com/docs/errors-and-limits#rate_limited"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "internal_error",
"message": "retry with backoff",
"requestId": "req_8f2c1d4e5a6b7c8d",
"docs_url": "https://referalli.com/docs/errors-and-limits#internal_error"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequiredExample
{
"error": {
"code": "string",
"message": "string",
"details": {},
"requestId": "string",
"docs_url": "string"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequiredhttps://referalli.com /v1/webhook-endpoints/{id}/deliveries What one endpoint was sent, newest first.
Auth: an API key with webhooks:read (or full), or a session of any role.
Parameters
idstringpathrequiredlimitintegerquerystarting_afterstringquerynext_cursor); returns the items after it. From API version 2026-11-01; ignored under 2026-10-21, where lists are a capped plain array.ending_beforestringquerystarting_after. From API version 2026-11-01; ignored under 2026-10-21, where lists are a capped plain array.created[gte]stringquerycreated[lte]stringqueryreferalli-versionstringheaderx-org-idstringheaderreferalli-modestringheadertest runs a session request against the org's test data. With an API key it must match the key's mode (400 mode_mismatch otherwise). The header name from before the rename is still accepted.cURL
curl -X GET "https://referalli.com/v1/webhook-endpoints/{id}/deliveries?limit=&starting_after=&ending_before=&created%5Bgte%5D=&created%5Blte%5D=" \
-H "referalli-version: <value>" \
-H "x-org-id: <value>" \
-H "referalli-mode: <value>"TypeScript
const res = await fetch('https://referalli.com/v1/webhook-endpoints/{id}/deliveries?limit=&starting_after=&ending_before=&created%5Bgte%5D=&created%5Blte%5D=', {
method: 'GET',
headers: {
'referalli-version': '<value>',
'x-org-id': '<value>',
'referalli-mode': '<value>',
},
});
const data = await res.json();Python
import requests
res = requests.request(
"GET",
"https://referalli.com/v1/webhook-endpoints/{id}/deliveries?limit=&starting_after=&ending_before=&created%5Bgte%5D=&created%5Blte%5D=",
headers={
"referalli-version": "<value>",
"x-org-id": "<value>",
"referalli-mode": "<value>",
},
)
data = res.json()Go
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://referalli.com/v1/webhook-endpoints/{id}/deliveries?limit=&starting_after=&ending_before=&created%5Bgte%5D=&created%5Blte%5D=", nil)
req.Header.Set("referalli-version", "<value>")
req.Header.Set("x-org-id", "<value>")
req.Header.Set("referalli-mode", "<value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}PHP
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://referalli.com/v1/webhook-endpoints/{id}/deliveries?limit=&starting_after=&ending_before=&created%5Bgte%5D=&created%5Blte%5D=');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['referalli-version: <value>', 'x-org-id: <value>', 'referalli-mode: <value>']);
$response = curl_exec($ch);
curl_close($ch);
echo $response;Ruby
require 'net/http'
require 'uri'
uri = URI('https://referalli.com/v1/webhook-endpoints/{id}/deliveries?limit=&starting_after=&ending_before=&created%5Bgte%5D=&created%5Blte%5D=')
req = Net::HTTP::Get.new(uri)
req['referalli-version'] = '<value>'
req['x-org-id'] = '<value>'
req['referalli-mode'] = '<value>'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
http.request(req)
end
puts res.bodyJava
import java.net.URI;
import java.net.http.*;
import java.net.http.HttpRequest.BodyPublishers;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://referalli.com/v1/webhook-endpoints/{id}/deliveries?limit=&starting_after=&ending_before=&created%5Bgte%5D=&created%5Blte%5D="))
.header("referalli-version", "<value>")
.header("x-org-id", "<value>")
.header("referalli-mode", "<value>")
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());Responses
Example
{
"object": "string",
"data": [
{
"id": "string",
"endpointId": "string",
"topic": "string",
"status": "string",
"attempts": 0,
"lastStatusCode": 0,
"lastAttemptAt": "2024-01-01T00:00:00Z",
"nextAt": "2024-01-01T00:00:00Z",
"createdAt": "2024-01-01T00:00:00Z"
}
],
"has_more": true,
"next_cursor": "string"
}Schema
objectstringrequireddataWebhookDelivery[]requiredShow child parameters
idstringrequiredendpointIdstringrequiredtopicstringrequiredstatusstringrequiredattemptsintegerrequiredlastStatusCodeintegerrequiredlastAttemptAtstringrequirednextAtstringrequiredcreatedAtstringrequiredhas_morebooleanrequirednext_cursorstringrequirederror.code is one of:Example
{
"error": {
"code": "validation_error",
"message": "the body or query failed validation, an unknown field was sent, the body is not valid json, or a session call has no `x-org-id`",
"details": [
{
"code": "invalid_format",
"path": [
"destinationUrl"
],
"message": "Invalid URL"
}
],
"docs_url": "https://referalli.com/docs/errors-and-limits#validation_error"
}
}{
"error": {
"code": "mode_mismatch",
"message": "the `referalli-mode` header disagrees with the api key's mode",
"docs_url": "https://referalli.com/docs/errors-and-limits#mode_mismatch"
}
}{
"error": {
"code": "bad_request",
"message": "rejected by the http layer before the handler",
"docs_url": "https://referalli.com/docs/errors-and-limits#bad_request"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "unauthorized",
"message": "no credentials, an unknown, revoked or expired api key or session, or a signature that did not verify",
"docs_url": "https://referalli.com/docs/errors-and-limits#unauthorized"
}
}{
"error": {
"code": "step_up_required",
"message": "a partner with two-factor on must send `x-totp-code`",
"docs_url": "https://referalli.com/docs/errors-and-limits#step_up_required"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "forbidden",
"message": "the wrong role, a key without the needed scope (the message names it), not a member, a suspended org, or a publishable key from an origin it does not allow",
"docs_url": "https://referalli.com/docs/errors-and-limits#forbidden"
}
}{
"error": {
"code": "sso_required",
"message": "this organization requires single sign-on",
"docs_url": "https://referalli.com/docs/errors-and-limits#sso_required"
}
}{
"error": {
"code": "access_suspended",
"message": "your identity provider suspended your access and you are the last owner",
"docs_url": "https://referalli.com/docs/errors-and-limits#access_suspended"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "not_found",
"message": "the resource does not exist in this org (ids from other orgs look the same), a referenced id does not exist, a list cursor is not in the list, or the endpoint does not exist",
"docs_url": "https://referalli.com/docs/errors-and-limits#not_found"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "rate_limited",
"message": "an endpoint limit or the per-key quota was exceeded",
"docs_url": "https://referalli.com/docs/errors-and-limits#rate_limited"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "internal_error",
"message": "retry with backoff",
"requestId": "req_8f2c1d4e5a6b7c8d",
"docs_url": "https://referalli.com/docs/errors-and-limits#internal_error"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequiredExample
{
"error": {
"code": "string",
"message": "string",
"details": {},
"requestId": "string",
"docs_url": "string"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequiredhttps://referalli.com /v1/webhook-deliveries/{id} One delivery in full: the exact payload sent, its eventId, and what the endpoint answered last (lastStatusCode, the first 2,000 characters of lastResponseBody, or lastError when there was no response).
Auth: an API key with webhooks:read (or full), or a session of any role.
Parameters
idstringpathrequiredx-org-idstringheaderreferalli-modestringheadertest runs a session request against the org's test data. With an API key it must match the key's mode (400 mode_mismatch otherwise). The header name from before the rename is still accepted.cURL
curl -X GET "https://referalli.com/v1/webhook-deliveries/{id}" \
-H "x-org-id: <value>" \
-H "referalli-mode: <value>"TypeScript
const res = await fetch('https://referalli.com/v1/webhook-deliveries/{id}', {
method: 'GET',
headers: {
'x-org-id': '<value>',
'referalli-mode': '<value>',
},
});
const data = await res.json();Python
import requests
res = requests.request(
"GET",
"https://referalli.com/v1/webhook-deliveries/{id}",
headers={
"x-org-id": "<value>",
"referalli-mode": "<value>",
},
)
data = res.json()Go
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://referalli.com/v1/webhook-deliveries/{id}", nil)
req.Header.Set("x-org-id", "<value>")
req.Header.Set("referalli-mode", "<value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}PHP
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://referalli.com/v1/webhook-deliveries/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['x-org-id: <value>', 'referalli-mode: <value>']);
$response = curl_exec($ch);
curl_close($ch);
echo $response;Ruby
require 'net/http'
require 'uri'
uri = URI('https://referalli.com/v1/webhook-deliveries/{id}')
req = Net::HTTP::Get.new(uri)
req['x-org-id'] = '<value>'
req['referalli-mode'] = '<value>'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
http.request(req)
end
puts res.bodyJava
import java.net.URI;
import java.net.http.*;
import java.net.http.HttpRequest.BodyPublishers;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://referalli.com/v1/webhook-deliveries/{id}"))
.header("x-org-id", "<value>")
.header("referalli-mode", "<value>")
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());Responses
Example
{
"id": "string",
"endpointId": "string",
"topic": "string",
"status": "string",
"attempts": 0,
"lastStatusCode": 0,
"lastAttemptAt": "2024-01-01T00:00:00Z",
"nextAt": "2024-01-01T00:00:00Z",
"createdAt": "2024-01-01T00:00:00Z",
"eventId": "string",
"payload": {},
"lastResponseBody": "string",
"lastError": "string"
}Schema
idstringrequiredendpointIdstringrequiredtopicstringrequiredstatusstringrequiredattemptsintegerrequiredlastStatusCodeintegerrequiredlastAttemptAtstringrequirednextAtstringrequiredcreatedAtstringrequiredeventIdstringrequiredpayloadobjectrequiredlastResponseBodystringrequiredlastErrorstringrequirederror.code is one of:Example
{
"error": {
"code": "validation_error",
"message": "the body or query failed validation, an unknown field was sent, the body is not valid json, or a session call has no `x-org-id`",
"details": [
{
"code": "invalid_format",
"path": [
"destinationUrl"
],
"message": "Invalid URL"
}
],
"docs_url": "https://referalli.com/docs/errors-and-limits#validation_error"
}
}{
"error": {
"code": "mode_mismatch",
"message": "the `referalli-mode` header disagrees with the api key's mode",
"docs_url": "https://referalli.com/docs/errors-and-limits#mode_mismatch"
}
}{
"error": {
"code": "bad_request",
"message": "rejected by the http layer before the handler",
"docs_url": "https://referalli.com/docs/errors-and-limits#bad_request"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "unauthorized",
"message": "no credentials, an unknown, revoked or expired api key or session, or a signature that did not verify",
"docs_url": "https://referalli.com/docs/errors-and-limits#unauthorized"
}
}{
"error": {
"code": "step_up_required",
"message": "a partner with two-factor on must send `x-totp-code`",
"docs_url": "https://referalli.com/docs/errors-and-limits#step_up_required"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "forbidden",
"message": "the wrong role, a key without the needed scope (the message names it), not a member, a suspended org, or a publishable key from an origin it does not allow",
"docs_url": "https://referalli.com/docs/errors-and-limits#forbidden"
}
}{
"error": {
"code": "sso_required",
"message": "this organization requires single sign-on",
"docs_url": "https://referalli.com/docs/errors-and-limits#sso_required"
}
}{
"error": {
"code": "access_suspended",
"message": "your identity provider suspended your access and you are the last owner",
"docs_url": "https://referalli.com/docs/errors-and-limits#access_suspended"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "not_found",
"message": "the resource does not exist in this org (ids from other orgs look the same), a referenced id does not exist, a list cursor is not in the list, or the endpoint does not exist",
"docs_url": "https://referalli.com/docs/errors-and-limits#not_found"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "rate_limited",
"message": "an endpoint limit or the per-key quota was exceeded",
"docs_url": "https://referalli.com/docs/errors-and-limits#rate_limited"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "internal_error",
"message": "retry with backoff",
"requestId": "req_8f2c1d4e5a6b7c8d",
"docs_url": "https://referalli.com/docs/errors-and-limits#internal_error"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequiredExample
{
"error": {
"code": "string",
"message": "string",
"details": {},
"requestId": "string",
"docs_url": "string"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequiredhttps://referalli.com /v1/webhook-deliveries/{id}/replay Queues the delivery again at once with its attempt count reset. It keeps its webhook-id, so receivers can deduplicate.
Auth: an API key with webhooks:write (or full), or a session with role owner, admin.
Parameters
idstringpathrequiredIdempotency-Keystringheaderidempotent-replayed: true) and nothing runs twice. The same key on a different request is 422 idempotency_key_reused; while the first is still running, 409 idempotency_in_progress.x-org-idstringheaderreferalli-modestringheadertest runs a session request against the org's test data. With an API key it must match the key's mode (400 mode_mismatch otherwise). The header name from before the rename is still accepted.cURL
curl -X POST "https://referalli.com/v1/webhook-deliveries/{id}/replay" \
-H "Idempotency-Key: <value>" \
-H "x-org-id: <value>" \
-H "referalli-mode: <value>"TypeScript
const res = await fetch('https://referalli.com/v1/webhook-deliveries/{id}/replay', {
method: 'POST',
headers: {
'Idempotency-Key': '<value>',
'x-org-id': '<value>',
'referalli-mode': '<value>',
},
});
const data = await res.json();Python
import requests
res = requests.request(
"POST",
"https://referalli.com/v1/webhook-deliveries/{id}/replay",
headers={
"Idempotency-Key": "<value>",
"x-org-id": "<value>",
"referalli-mode": "<value>",
},
)
data = res.json()Go
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("POST", "https://referalli.com/v1/webhook-deliveries/{id}/replay", nil)
req.Header.Set("Idempotency-Key", "<value>")
req.Header.Set("x-org-id", "<value>")
req.Header.Set("referalli-mode", "<value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}PHP
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://referalli.com/v1/webhook-deliveries/{id}/replay');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Idempotency-Key: <value>', 'x-org-id: <value>', 'referalli-mode: <value>']);
$response = curl_exec($ch);
curl_close($ch);
echo $response;Ruby
require 'net/http'
require 'uri'
uri = URI('https://referalli.com/v1/webhook-deliveries/{id}/replay')
req = Net::HTTP::Post.new(uri)
req['Idempotency-Key'] = '<value>'
req['x-org-id'] = '<value>'
req['referalli-mode'] = '<value>'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
http.request(req)
end
puts res.bodyJava
import java.net.URI;
import java.net.http.*;
import java.net.http.HttpRequest.BodyPublishers;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://referalli.com/v1/webhook-deliveries/{id}/replay"))
.header("Idempotency-Key", "<value>")
.header("x-org-id", "<value>")
.header("referalli-mode", "<value>")
.method("POST", BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());Responses
Example
{
"ok": true
}Schema
okbooleanrequirederror.code is one of:Example
{
"error": {
"code": "validation_error",
"message": "the body or query failed validation, an unknown field was sent, the body is not valid json, or a session call has no `x-org-id`",
"details": [
{
"code": "invalid_format",
"path": [
"destinationUrl"
],
"message": "Invalid URL"
}
],
"docs_url": "https://referalli.com/docs/errors-and-limits#validation_error"
}
}{
"error": {
"code": "mode_mismatch",
"message": "the `referalli-mode` header disagrees with the api key's mode",
"docs_url": "https://referalli.com/docs/errors-and-limits#mode_mismatch"
}
}{
"error": {
"code": "bad_request",
"message": "rejected by the http layer before the handler",
"docs_url": "https://referalli.com/docs/errors-and-limits#bad_request"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "unauthorized",
"message": "no credentials, an unknown, revoked or expired api key or session, or a signature that did not verify",
"docs_url": "https://referalli.com/docs/errors-and-limits#unauthorized"
}
}{
"error": {
"code": "step_up_required",
"message": "a partner with two-factor on must send `x-totp-code`",
"docs_url": "https://referalli.com/docs/errors-and-limits#step_up_required"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "forbidden",
"message": "the wrong role, a key without the needed scope (the message names it), not a member, a suspended org, or a publishable key from an origin it does not allow",
"docs_url": "https://referalli.com/docs/errors-and-limits#forbidden"
}
}{
"error": {
"code": "sso_required",
"message": "this organization requires single sign-on",
"docs_url": "https://referalli.com/docs/errors-and-limits#sso_required"
}
}{
"error": {
"code": "access_suspended",
"message": "your identity provider suspended your access and you are the last owner",
"docs_url": "https://referalli.com/docs/errors-and-limits#access_suspended"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "not_found",
"message": "the resource does not exist in this org (ids from other orgs look the same), a referenced id does not exist, a list cursor is not in the list, or the endpoint does not exist",
"docs_url": "https://referalli.com/docs/errors-and-limits#not_found"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "conflict",
"message": "a unique value is taken, or the action would break a rule (the message says which)",
"docs_url": "https://referalli.com/docs/errors-and-limits#conflict"
}
}{
"error": {
"code": "idempotency_in_progress",
"message": "a request with the same `idempotency-key` is still running",
"docs_url": "https://referalli.com/docs/errors-and-limits#idempotency_in_progress"
}
}{
"error": {
"code": "replay",
"message": "a signed auth-connection call reused an id already received",
"docs_url": "https://referalli.com/docs/errors-and-limits#replay"
}
}{
"error": {
"code": "live_mode_only",
"message": "only changeable in live mode",
"docs_url": "https://referalli.com/docs/errors-and-limits#live_mode_only"
}
}{
"error": {
"code": "test_mode_only",
"message": "only exists in test mode",
"docs_url": "https://referalli.com/docs/errors-and-limits#test_mode_only"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "idempotency_key_reused",
"message": "the `idempotency-key` was used for a different request",
"docs_url": "https://referalli.com/docs/errors-and-limits#idempotency_key_reused"
}
}{
"error": {
"code": "validation_error",
"message": "on the signed auth-connection endpoints",
"docs_url": "https://referalli.com/docs/errors-and-limits#validation_error"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "rate_limited",
"message": "an endpoint limit or the per-key quota was exceeded",
"docs_url": "https://referalli.com/docs/errors-and-limits#rate_limited"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequirederror.code is one of:Example
{
"error": {
"code": "internal_error",
"message": "retry with backoff",
"requestId": "req_8f2c1d4e5a6b7c8d",
"docs_url": "https://referalli.com/docs/errors-and-limits#internal_error"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequiredExample
{
"error": {
"code": "string",
"message": "string",
"details": {},
"requestId": "string",
"docs_url": "string"
}
}Schema
errorobjectrequiredShow child parameters
codestringrequiredmessagestringrequireddetailsrequestIdstringdocs_urlstringrequiredclick.recordedFires for every click (tracked link redirects, ?via= landings, server-side clicks). High volume: subscribe only if you need click-level data.
POSTed to every active webhook endpoint subscribed to click.recorded (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A tracked click was recorded: the click.recorded delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a click.recorded event: Fires for every click (tracked link redirects, ?via= landings, server-side clicks). High volume: subscribe only if you need click-level data.Show child parameters
clickIdstringrequiredprogramIdstringrequiredpartnerIdstringrequiredlinkIdstringrequired{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"clickId": "string",
"programId": "string",
"partnerId": "string",
"linkId": "string"
}
}Responses
referral.createdA new referral: from POST /v1/referrals/associate, an auth-platform sign-up, a mobile install, a won deal or an agent attribution.
POSTed to every active webhook endpoint subscribed to referral.created (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A customer was attributed to a partner: the referral.created delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a referral.created event: A new referral: from POST /v1/referrals/associate, an auth-platform sign-up, a mobile install, a won deal or an agent attribution.Show child parameters
referralIdstringrequiredprogramIdstringrequiredpartnerIdstringrequiredpartnerExternalRefstringrequiredcustomerRefstringrequiredstatusstringrequiredmatchedViastringrequired{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"referralId": "string",
"programId": "string",
"partnerId": "string",
"partnerExternalRef": "string",
"customerRef": "string",
"status": "active",
"matchedVia": "string"
}
}Responses
referral.heldA risk or self-referral check put the referral in pending_review; reasons says why and caseId is the fraud case opened for it.
POSTed to every active webhook endpoint subscribed to referral.held (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A referral was held for review: the referral.held delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a referral.held event: A risk or self-referral check put the referral in pending_review; reasons says why and caseId is the fraud case opened for it.Show child parameters
referralIdstringrequiredprogramIdstringrequiredpartnerIdstringrequiredpartnerExternalRefstringrequiredcustomerRefstringrequiredstatusstringrequiredreasonsstring[]requiredcaseIdstringrequired{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"referralId": "string",
"programId": "string",
"partnerId": "string",
"partnerExternalRef": "string",
"customerRef": "string",
"status": "active",
"reasons": [
"string"
],
"caseId": "string"
}
}Responses
referral.approvedBack to active: approved by the merchant, a fraud case dismissed (reason: "fraud_case_dismissed", with caseId), or a hold released by email verification (reason: "email_verified").
POSTed to every active webhook endpoint subscribed to referral.approved (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A held referral was approved: the referral.approved delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a referral.approved event: Back to active: approved by the merchant, a fraud case dismissed (reason: "fraud_case_dismissed", with caseId), or a hold released by email verification (reason: "email_verified").Show child parameters
referralIdstringrequiredprogramIdstringrequiredpartnerIdstringrequiredpartnerExternalRefstringrequiredcustomerRefstringrequiredstatusstringrequiredreasonstringcaseIdstring{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"referralId": "string",
"programId": "string",
"partnerId": "string",
"partnerExternalRef": "string",
"customerRef": "string",
"status": "active",
"reason": "string",
"caseId": "string"
}
}Responses
referral.voidedIt earns nothing more: voided by the merchant, a fraud case (reason fraud_case_voided or partner_banned, with caseId) or an identity provider (fraud_confirmed).
POSTed to every active webhook endpoint subscribed to referral.voided (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A referral was voided: the referral.voided delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a referral.voided event: It earns nothing more: voided by the merchant, a fraud case (reason fraud_case_voided or partner_banned, with caseId) or an identity provider (fraud_confirmed).Show child parameters
referralIdstringrequiredprogramIdstringrequiredpartnerIdstringrequiredpartnerExternalRefstringrequiredcustomerRefstringrequiredstatusstringrequiredreasonstringcaseIdstring{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"referralId": "string",
"programId": "string",
"partnerId": "string",
"partnerExternalRef": "string",
"customerRef": "string",
"status": "active",
"reason": "string",
"caseId": "string"
}
}Responses
referral.pausedThe merchant paused the referral: it earns no new commissions until resumed.
POSTed to every active webhook endpoint subscribed to referral.paused (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A referral was paused: the referral.paused delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a referral.paused event: The merchant paused the referral: it earns no new commissions until resumed.Show child parameters
referralIdstringrequiredprogramIdstringrequiredpartnerIdstringrequiredpartnerExternalRefstringrequiredcustomerRefstringrequiredstatusstringrequired{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"referralId": "string",
"programId": "string",
"partnerId": "string",
"partnerExternalRef": "string",
"customerRef": "string",
"status": "active"
}
}Responses
referral.resumedThe referral is active again.
POSTed to every active webhook endpoint subscribed to referral.resumed (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A paused referral was resumed: the referral.resumed delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a referral.resumed event: The referral is active again.Show child parameters
referralIdstringrequiredprogramIdstringrequiredpartnerIdstringrequiredpartnerExternalRefstringrequiredcustomerRefstringrequiredstatusstringrequired{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"referralId": "string",
"programId": "string",
"partnerId": "string",
"partnerExternalRef": "string",
"customerRef": "string",
"status": "active"
}
}Responses
referral.reassignedThe merchant reassigned the referral; the payload names the new partner, with the previous one in previousPartnerId and previousPartnerExternalRef.
POSTed to every active webhook endpoint subscribed to referral.reassigned (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A referral moved to another partner: the referral.reassigned delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a referral.reassigned event: The merchant reassigned the referral; the payload names the new partner, with the previous one in previousPartnerId and previousPartnerExternalRef.Show child parameters
referralIdstringrequiredprogramIdstringrequiredpartnerIdstringrequiredpartnerExternalRefstringrequiredcustomerRefstringrequiredstatusstringrequiredpreviousPartnerIdstringrequiredpreviousPartnerExternalRefstringrequired{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"referralId": "string",
"programId": "string",
"partnerId": "string",
"partnerExternalRef": "string",
"customerRef": "string",
"status": "active",
"previousPartnerId": "string",
"previousPartnerExternalRef": "string"
}
}Responses
referral.rejectedA self-referral the program's selfReferralPolicy: "reject" refused, so no referral exists. A fraud.case_opened follows.
POSTed to every active webhook endpoint subscribed to referral.rejected (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A self-referral was refused: the referral.rejected delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a referral.rejected event: A self-referral the program's selfReferralPolicy: "reject" refused, so no referral exists. A fraud.case_opened follows.Show child parameters
programIdstringrequiredpartnerIdstringrequiredcustomerRefstringrequiredreasonstringrequired{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"programId": "string",
"partnerId": "string",
"customerRef": "string",
"reason": "string"
}
}Responses
customer.aliasedThe app changed a user's id after their sign-up was filed (through an auth connection); their referrals now use toCustomerRef.
POSTed to every active webhook endpoint subscribed to customer.aliased (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A customer's id changed: the customer.aliased delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a customer.aliased event: The app changed a user's id after their sign-up was filed (through an auth connection); their referrals now use toCustomerRef.Show child parameters
fromCustomerRefstringrequiredtoCustomerRefstringrequiredreferralIdsstring[]requiredpartnerIdstringrequired{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"fromCustomerRef": "string",
"toCustomerRef": "string",
"referralIds": [
"string"
],
"partnerId": "string"
}
}Responses
commission.earnedA payment (or a signup, trial or product-event bounty) earned a partner a commission line. Payment fields are null for bounties.
POSTed to every active webhook endpoint subscribed to commission.earned (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A commission line was earned: the commission.earned delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a commission.earned event: A payment (or a signup, trial or product-event bounty) earned a partner a commission line. Payment fields are null for bounties.Show child parameters
commissionIdstringrequiredpartnerIdstringrequiredprogramIdstringrequiredamountMinorintegerrequiredcurrencystringrequiredreferralIdstringrequiredcustomerRefstringrequiredbillingEventIdstringrequiredproviderEventIdstringrequiredinvoiceRefstringrequiredcustomerExternalRefstringrequiredpartnerExternalRefstringrequiredlevelintegerrequiredmemostringrequiredbasisMinorintegerrequired{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"commissionId": "string",
"partnerId": "string",
"programId": "string",
"amountMinor": 0,
"currency": "string",
"referralId": "string",
"customerRef": "string",
"billingEventId": "string",
"providerEventId": "string",
"invoiceRef": "string",
"customerExternalRef": "string",
"partnerExternalRef": "string",
"level": 0,
"memo": "string",
"basisMinor": 0
}
}Responses
commission.reversedA refund or dispute clawed back an earned line. commissionId and relatedCommissionId are the original line, reversalId the new reversed event; amountMinor is negative.
POSTed to every active webhook endpoint subscribed to commission.reversed (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A commission line was reversed: the commission.reversed delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a commission.reversed event: A refund or dispute clawed back an earned line. commissionId and relatedCommissionId are the original line, reversalId the new reversed event; amountMinor is negative.Show child parameters
commissionIdstringrequiredrelatedCommissionIdstringrequiredreversalIdstringrequiredpartnerIdstringrequiredprogramIdstringrequiredamountMinorintegerrequiredcurrencystringrequiredreferralIdstringrequiredcustomerRefstringrequiredbillingEventIdstringrequiredproviderEventIdstringrequiredinvoiceRefstringrequiredcustomerExternalRefstringrequiredpartnerExternalRefstringrequiredlevelintegerrequiredmemostringrequired{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"commissionId": "string",
"relatedCommissionId": "string",
"reversalId": "string",
"partnerId": "string",
"programId": "string",
"amountMinor": 0,
"currency": "string",
"referralId": "string",
"customerRef": "string",
"billingEventId": "string",
"providerEventId": "string",
"invoiceRef": "string",
"customerExternalRef": "string",
"partnerExternalRef": "string",
"level": 0,
"memo": "string"
}
}Responses
commission.settledThe merchant paid the line itself (store_credit, or merchant_credit for programs that settle as they earn), outside payout runs.
POSTed to every active webhook endpoint subscribed to commission.settled (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A commission line was settled by the merchant: the commission.settled delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a commission.settled event: The merchant paid the line itself (store_credit, or merchant_credit for programs that settle as they earn), outside payout runs.Show child parameters
commissionIdstringrequiredpartnerIdstringrequiredprogramIdstringrequiredreferralIdstringrequiredamountMinorintegerrequiredcurrencystringrequiredmethodstringrequiredreferencestringrequired{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"commissionId": "string",
"partnerId": "string",
"programId": "string",
"referralId": "string",
"amountMinor": 0,
"currency": "string",
"method": "store_credit",
"reference": "string"
}
}Responses
partner.appliedAn application waiting for approval. enrollmentId is absent for applications from the public program page.
POSTed to every active webhook endpoint subscribed to partner.applied (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A partner applied to a program: the partner.applied delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a partner.applied event: An application waiting for approval. enrollmentId is absent for applications from the public program page.Show child parameters
programIdstringrequiredpartnerIdstringrequiredenrollmentIdstring{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"programId": "string",
"partnerId": "string",
"enrollmentId": "string"
}
}Responses
partner.enrolledThe merchant (or an import) enrolled the partner in a program, approved at once.
POSTed to every active webhook endpoint subscribed to partner.enrolled (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A partner was enrolled: the partner.enrolled delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a partner.enrolled event: The merchant (or an import) enrolled the partner in a program, approved at once.Show child parameters
programIdstringrequiredpartnerIdstringrequiredenrollmentIdstringrequired{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"programId": "string",
"partnerId": "string",
"enrollmentId": "string"
}
}Responses
partner.approvedAn application was approved, or a partner joined a program that approves at once. enrollmentId is present when approved from an application.
POSTed to every active webhook endpoint subscribed to partner.approved (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A partner was approved: the partner.approved delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a partner.approved event: An application was approved, or a partner joined a program that approves at once. enrollmentId is present when approved from an application.Show child parameters
programIdstringrequiredpartnerIdstringrequiredenrollmentIdstring{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"programId": "string",
"partnerId": "string",
"enrollmentId": "string"
}
}Responses
partner.level_upPartner leveling promoted the partner; referrals is the count that qualified them.
POSTed to every active webhook endpoint subscribed to partner.level_up (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A partner reached a new level: the partner.level_up delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a partner.level_up event: Partner leveling promoted the partner; referrals is the count that qualified them.Show child parameters
programIdstringrequiredpartnerIdstringrequiredlevelstringrequiredreferralsintegerrequired{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"programId": "string",
"partnerId": "string",
"level": "string",
"referrals": 0
}
}Responses
payout.scheduledA payout run included the partner; nothing has been paid yet.
POSTed to every active webhook endpoint subscribed to payout.scheduled (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A payout was created in a run: the payout.scheduled delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a payout.scheduled event: A payout run included the partner; nothing has been paid yet.Show child parameters
payoutIdstringrequiredpartnerIdstringrequiredamountMinorintegerrequiredcurrencystringrequired{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"payoutId": "string",
"partnerId": "string",
"amountMinor": 0,
"currency": "string"
}
}Responses
payout.submittedThe payout provider accepted the payout and settles it asynchronously; payout.sent or payout.failed follows.
POSTed to every active webhook endpoint subscribed to payout.submitted (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A payout was submitted to the provider: the payout.submitted delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a payout.submitted event: The payout provider accepted the payout and settles it asynchronously; payout.sent or payout.failed follows.Show child parameters
payoutIdstringrequiredpartnerIdstringrequiredamountMinorintegerrequiredcurrencystringrequired{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"payoutId": "string",
"partnerId": "string",
"amountMinor": 0,
"currency": "string"
}
}Responses
payout.sentThe money left: the provider confirmed the payout (at once, or later through its settlement webhook).
POSTed to every active webhook endpoint subscribed to payout.sent (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A payout was paid: the payout.sent delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a payout.sent event: The money left: the provider confirmed the payout (at once, or later through its settlement webhook).Show child parameters
payoutIdstringrequiredpartnerIdstringrequiredamountMinorintegerrequiredcurrencystringrequired{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"payoutId": "string",
"partnerId": "string",
"amountMinor": 0,
"currency": "string"
}
}Responses
payout.failedThe provider refused or failed the payout; reason is its message. The lines go back to the partner's approved balance.
POSTed to every active webhook endpoint subscribed to payout.failed (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A payout failed: the payout.failed delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a payout.failed event: The provider refused or failed the payout; reason is its message. The lines go back to the partner's approved balance.Show child parameters
payoutIdstringrequiredpartnerIdstringrequiredreasonstringrequired{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"payoutId": "string",
"partnerId": "string",
"reason": "string"
}
}Responses
payout.cancelledOne per payout when an unexecuted payout run is cancelled.
POSTed to every active webhook endpoint subscribed to payout.cancelled (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A payout was cancelled: the payout.cancelled delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a payout.cancelled event: One per payout when an unexecuted payout run is cancelled.Show child parameters
payoutIdstringrequiredpartnerIdstringrequired{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"payoutId": "string",
"partnerId": "string"
}
}Responses
tax.form_deliveredA filed 1099-NEC was accepted and delivered; emailed says whether the filing provider also emailed it.
POSTed to every active webhook endpoint subscribed to tax.form_delivered (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A tax form was delivered to a partner: the tax.form_delivered delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a tax.form_delivered event: A filed 1099-NEC was accepted and delivered; emailed says whether the filing provider also emailed it.Show child parameters
documentIdstringrequiredpartnerIdstringrequiredtaxYearintegerrequiredformstringrequiredcorrectedbooleanrequiredemailedbooleanrequired{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"documentId": "string",
"partnerId": "string",
"taxYear": 0,
"form": "string",
"corrected": true,
"emailed": true
}
}Responses
referee_reward.earnedThe friend's side of a double-sided program: the referred customer's reward was issued.
POSTed to every active webhook endpoint subscribed to referee_reward.earned (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A referred customer earned their reward: the referee_reward.earned delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a referee_reward.earned event: The friend's side of a double-sided program: the referred customer's reward was issued.Show child parameters
rewardIdstringrequiredreferralIdstringrequiredprogramIdstringrequiredcustomerRefstringrequiredcustomerExternalRefstringrequiredkindstringrequiredamountMinorintegerrequiredcurrencystringrequiredcodestringrequiredbillingEventIdstringrequiredcommissionIdstringrequired{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"rewardId": "string",
"referralId": "string",
"programId": "string",
"customerRef": "string",
"customerExternalRef": "string",
"kind": "store_credit",
"amountMinor": 0,
"currency": "string",
"code": "string",
"billingEventId": "string",
"commissionId": "string"
}
}Responses
credit.redeemedFrom POST /v1/rewards/{id}/redeem or POST /v1/rewards/redeem-by-code. amountMinor is what this redemption used (capped at the balance); a repeated externalId does not fire again.
POSTed to every active webhook endpoint subscribed to credit.redeemed (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A referee reward was redeemed: the credit.redeemed delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a credit.redeemed event: From POST /v1/rewards/{id}/redeem or POST /v1/rewards/redeem-by-code. amountMinor is what this redemption used (capped at the balance); a repeated externalId does not fire again.Show child parameters
grantIdstringrequiredrewardIdstringrequiredamountMinorintegerrequiredremainingMinorintegerrequired{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"grantId": "string",
"rewardId": "string",
"amountMinor": 0,
"remainingMinor": 0
}
}Responses
billing_event.recordedFires once per newly recorded billing event from any connection, never for duplicates.
POSTed to every active webhook endpoint subscribed to billing_event.recorded (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A billing event was recorded: the billing_event.recorded delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a billing_event.recorded event: Fires once per newly recorded billing event from any connection, never for duplicates.Show child parameters
billingEventIdstringrequiredtypestringrequiredcustomerRefstringrequiredcurrencystringrequiredamountMinorintegerrequired{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"billingEventId": "string",
"type": "string",
"customerRef": "string",
"currency": "string",
"amountMinor": 0
}
}Responses
roi.payback_reachedOnce per credit grant, the first time its recipient's profit after it covered its cost. A later refund that un-pays it doesn't fire it again.
POSTed to every active webhook endpoint subscribed to roi.payback_reached (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A credit grant paid back: the roi.payback_reached delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a roi.payback_reached event: Once per credit grant, the first time its recipient's profit after it covered its cost. A later refund that un-pays it doesn't fire it again.Show child parameters
grantIdstringrequiredpaybackDaysintegerrequirednetMinorintegerrequiredcurrencystringrequired{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"grantId": "string",
"paybackDays": 0,
"netMinor": 0,
"currency": "string"
}
}Responses
roi.pattern_detectedA daily summary, at most once per pattern per day, only when the set of matching subjects changed and count is above zero. Read the full list from GET /v1/roi/patterns/{pattern}.
POSTed to every active webhook endpoint subscribed to roi.pattern_detected (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A value pattern changed: the roi.pattern_detected delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a roi.pattern_detected event: A daily summary, at most once per pattern per day, only when the set of matching subjects changed and count is above zero. Read the full list from GET /v1/roi/patterns/{pattern}.Show child parameters
patternstringrequiredcountintegerrequirednewCountintegerrequiredsamplestring[]required{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"pattern": "credit_only",
"count": 0,
"newCount": 0,
"sample": [
"string"
]
}
}Responses
fraud.case_openedA case is waiting in the queue. kind is self_referral, quality, ring, identity_risk or value_pattern; the other fields depend on it (partnerId, referralId, ring members, identity-risk reasons, value pattern). A self-referral rejected by policy has referralId: null and rejected: true.
POSTed to every active webhook endpoint subscribed to fraud.case_opened (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A fraud case was opened: the fraud.case_opened delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a fraud.case_opened event: A case is waiting in the queue. kind is self_referral, quality, ring, identity_risk or value_pattern; the other fields depend on it (partnerId, referralId, ring members, identity-risk reasons, value pattern). A self-referral rejected by policy has referralId: null and rejected: true.Show child parameters
caseIdstringrequiredkindstringrequiredpartnerIdstringreferralIdstringmembersstring[]reasonsstring[]patternstringrejectedboolean{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"caseId": "string",
"kind": "self_referral",
"partnerId": "string",
"referralId": "string",
"members": [
"string"
],
"reasons": [
"string"
],
"pattern": "string",
"rejected": true
}
}Responses
deal.submittedA B2B deal waiting for the merchant to approve.
POSTed to every active webhook endpoint subscribed to deal.submitted (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A partner registered a deal: the deal.submitted delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a deal.submitted event: A B2B deal waiting for the merchant to approve.Show child parameters
dealIdstringrequiredpartnerIdstringrequiredcompanystringrequired{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"dealId": "string",
"partnerId": "string",
"company": "string"
}
}Responses
dispute.resolvedThe merchant resolved a partner's dispute with the resolution note.
POSTed to every active webhook endpoint subscribed to dispute.resolved (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A partner dispute was resolved: the dispute.resolved delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a dispute.resolved event: The merchant resolved a partner's dispute with the resolution note.Show child parameters
disputeIdstringrequiredresolutionstringrequired{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"disputeId": "string",
"resolution": "string"
}
}Responses
privacy.request_completedAn access or erasure request opened with POST /v1/privacy/requests completed or failed; found is present when completed.
POSTed to every active webhook endpoint subscribed to privacy.request_completed (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A data-subject request finished: the privacy.request_completed delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a privacy.request_completed event: An access or erasure request opened with POST /v1/privacy/requests completed or failed; found is present when completed.Show child parameters
requestIdstringrequiredtypestringrequiredstatusstringrequiredfoundboolean{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"requestId": "string",
"type": "access",
"status": "completed",
"found": true
}
}Responses
webhook_endpoint.disabledSent to your other active endpoints when one is disabled after every delivery failed for 5 days.
POSTed to every active webhook endpoint subscribed to webhook_endpoint.disabled (or *), signed the Standard Webhooks way. Answer any 2xx within 15 seconds; anything else is retried with backoff for 3 days.
Parameters
webhook-idstringheaderrequiredwebhook-timestampintegerheaderrequiredwebhook-signaturestringheaderrequiredv1, plus the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with the base64-decoded secret after whsec_. During a rotation, two signatures separated by a space.x-referalli-topicstringheaderrequiredPayload application/json
A failing webhook endpoint was disabled: the webhook_endpoint.disabled delivery body.
idstringrequiredevt_…); the same event delivered to several endpoints has the same id.topicstringrequiredorgIdstringrequiredlivemodebooleanrequiredcreatedAtstringrequireddataobjectrequireddata of a webhook_endpoint.disabled event: Sent to your other active endpoints when one is disabled after every delivery failed for 5 days.Show child parameters
endpointIdstringrequiredurlstringrequiredreasonstringrequiredlastStatusCodeintegerrequireddaysintegerrequired{
"id": "string",
"topic": "string",
"orgId": "string",
"livemode": true,
"createdAt": "2024-01-01T00:00:00Z",
"data": {
"endpointId": "string",
"url": "string",
"reason": "string",
"lastStatusCode": 0,
"days": 0
}
}