List durable webhook events
curl --request GET \
--url https://api.paywithlocus.com/api/credits/webhooks/events \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.paywithlocus.com/api/credits/webhooks/events"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.paywithlocus.com/api/credits/webhooks/events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.paywithlocus.com/api/credits/webhooks/events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.paywithlocus.com/api/credits/webhooks/events"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.paywithlocus.com/api/credits/webhooks/events")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.paywithlocus.com/api/credits/webhooks/events")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "credits.topup.completed",
"api_version": "2026-08-13",
"created_at": "2023-11-07T05:31:56Z",
"sequence": "<string>",
"tenant_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"data": {
"externalUserId": "<string>",
"amountUsd": "<string>",
"balanceUsd": "<string>",
"reference": "<string>",
"source": "checkout_session",
"metadata": {},
"bonusUsd": "<string>"
},
"retained_until": "2023-11-07T05:31:56Z",
"delivery": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"attempt": 2,
"destination_url": "<string>",
"status": "pending",
"manual_replay": true,
"scheduled_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"finished_at": "2023-11-07T05:31:56Z",
"http_status": 123,
"response_body": "<string>",
"error": "<string>"
}
}
],
"next_cursor": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}Webhooks
List durable webhook events
Lists durable webhook events for the workspace, newest first, with cursor pagination. Filter by event type to find an event before inspecting its delivery attempts.
GET
/
credits
/
webhooks
/
events
List durable webhook events
curl --request GET \
--url https://api.paywithlocus.com/api/credits/webhooks/events \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.paywithlocus.com/api/credits/webhooks/events"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.paywithlocus.com/api/credits/webhooks/events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.paywithlocus.com/api/credits/webhooks/events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.paywithlocus.com/api/credits/webhooks/events"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.paywithlocus.com/api/credits/webhooks/events")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.paywithlocus.com/api/credits/webhooks/events")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "credits.topup.completed",
"api_version": "2026-08-13",
"created_at": "2023-11-07T05:31:56Z",
"sequence": "<string>",
"tenant_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"data": {
"externalUserId": "<string>",
"amountUsd": "<string>",
"balanceUsd": "<string>",
"reference": "<string>",
"source": "checkout_session",
"metadata": {},
"bonusUsd": "<string>"
},
"retained_until": "2023-11-07T05:31:56Z",
"delivery": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"attempt": 2,
"destination_url": "<string>",
"status": "pending",
"manual_replay": true,
"scheduled_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"finished_at": "2023-11-07T05:31:56Z",
"http_status": 123,
"response_body": "<string>",
"error": "<string>"
}
}
],
"next_cursor": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}Authorizations
dashboardSessionsecretKey
Locus Pro dashboard session (Cognito). High-risk workspace administration requires an owner or admin role and fresh MFA/passkey step-up.
Query Parameters
Available options:
credits.topup.completed, credits.topup.failed, credits.burn.completed, credits.burn.failed, credits.refund.issued, credits.dispute.opened, credits.dispute.closed, credits.balance.changed, credits.balance.low, credits.account.frozen, credits.usage_drift.detected, credits.usage_drift.resolved Required range:
1 <= x <= 100