curl --request GET \
--url 'https://api.noresponse.org/v1/webhooks' \
--header "Authorization: Bearer $NORESPONSE_API_KEY"
import { NoResponse } from "@noresponse/node";
const noResponse = new NoResponse({
apiKey: process.env["NORESPONSE_API_KEY"] ?? "",
});
async function run() {
const result = await noResponse.webhookEndpoints.list();
console.log(result);
}
run();
from noresponse import NoResponse
import os
with NoResponse(
api_key=os.getenv("NORESPONSE_API_KEY", ""),
) as no_response:
res = no_response.webhook_endpoints.list()
# Handle response
print(res)
package main
import(
"context"
"os"
noresponse "github.com/noresponsehq/go/v5"
"log"
)
func main() {
ctx := context.Background()
s := noresponse.New(
noresponse.WithSecurity(os.Getenv("NORESPONSE_API_KEY")),
)
res, err := s.WebhookEndpoints.List(ctx)
if err != nil {
log.Fatal(err)
}
if res != nil {
// handle response
}
}
package hello.world;
import java.lang.Exception;
import org.noresponse.NoResponse;
import org.noresponse.models.errors.AuthenticationException;
import org.noresponse.models.errors.BadRequestException;
import org.noresponse.models.errors.ConflictException;
import org.noresponse.models.errors.NotFoundException;
import org.noresponse.models.errors.PermissionDeniedException;
import org.noresponse.models.errors.RateLimitException;
import org.noresponse.models.operations.ListWebhookEndpointsResponse;
public class Application {
public static void main(String[] args) throws Exception {
NoResponse sdk = NoResponse.builder()
.apiKey(System.getenv().getOrDefault("NORESPONSE_API_KEY", ""))
.build();
ListWebhookEndpointsResponse res = sdk.webhookEndpoints().list()
.call();
if (res.webhookEndpointList().isPresent()) {
System.out.println(res.webhookEndpointList().get());
}
}
}
using NoResponse;
using NoResponse.Models.Shared;
using System;
var sdk = new NoResponseClient(apiKey: Environment.GetEnvironmentVariable("NORESPONSE_API_KEY"));
var res = await sdk.WebhookEndpoints.ListAsync();
// handle response
<?php
declare(strict_types=1);
require 'vendor/autoload.php';
use NoResponse;
$sdk = NoResponse\NoResponseClient::builder()
->setSecurity(
getenv('NORESPONSE_API_KEY') ?: ''
)
->build();
$response = $sdk->webhookEndpoints->list(
);
if ($response->webhookEndpointList !== null) {
// handle response
}
require 'noresponse'
Models = ::NoResponse::Models
s = ::NoResponse::NoResponseClient.new(
api_key: ENV.fetch('NORESPONSE_API_KEY', '')
)
res = s.webhook_endpoints.list
unless res.nil?
# handle response
end
{
"items": [
{
"endpoint_id": "whe_01JA2ZD0E1F2G3H4J5K6M7N8P9",
"url": "https://hooks.example.com/noresponse",
"state": "verified",
"response_mode": "standard",
"created_at": "2026-10-22T09:00:00.000Z",
"verified_at": "2026-10-22T09:00:05.000Z",
"signing_keys": [
{
"key_id": "whk_01JA2Z9A1B2C3D4E5F6G7H8J9K",
"created_at": "2026-10-22T09:00:00.000Z",
"expires_at": "2026-10-29T10:00:00.000Z"
},
{
"key_id": "whk_01JA2ZD1M2N3P4Q5R6S7T8V9W0",
"created_at": "2026-10-22T10:00:00.000Z"
}
]
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 401,
"detail": "<string>",
"code": "unauthorized",
"request_id": "<string>",
"instance": "<string>",
"invalid_params": [
{
"field": "<string>",
"reason": "<string>",
"example": "<string>"
}
]
}{
"type": "https://docs.noresponse.org/problems/workspace-forbidden",
"title": "Forbidden",
"status": 403,
"detail": "The API key does not carry a scope this operation accepts.",
"code": "workspace_forbidden",
"request_id": "0123456789abcdef0123456789abcdef"
}{
"type": "https://docs.noresponse.org/problems/rate-limited",
"title": "Rate limited",
"status": 429,
"detail": "The tenant's assessment rate is exhausted; retry after the Retry-After interval.",
"code": "rate_limited",
"request_id": "0123456789abcdef0123456789abcdef"
}{
"type": "<string>",
"title": "<string>",
"status": 503,
"detail": "<string>",
"code": "service_unavailable",
"request_id": "<string>",
"instance": "<string>",
"invalid_params": [
{
"field": "<string>",
"reason": "<string>",
"example": "<string>"
}
]
}List your webhook endpoints
Every endpoint you hold, in every state, with the ids of its signing keys. Secrets are not returned. Requires the webhooks scope.
curl --request GET \
--url 'https://api.noresponse.org/v1/webhooks' \
--header "Authorization: Bearer $NORESPONSE_API_KEY"
import { NoResponse } from "@noresponse/node";
const noResponse = new NoResponse({
apiKey: process.env["NORESPONSE_API_KEY"] ?? "",
});
async function run() {
const result = await noResponse.webhookEndpoints.list();
console.log(result);
}
run();
from noresponse import NoResponse
import os
with NoResponse(
api_key=os.getenv("NORESPONSE_API_KEY", ""),
) as no_response:
res = no_response.webhook_endpoints.list()
# Handle response
print(res)
package main
import(
"context"
"os"
noresponse "github.com/noresponsehq/go/v5"
"log"
)
func main() {
ctx := context.Background()
s := noresponse.New(
noresponse.WithSecurity(os.Getenv("NORESPONSE_API_KEY")),
)
res, err := s.WebhookEndpoints.List(ctx)
if err != nil {
log.Fatal(err)
}
if res != nil {
// handle response
}
}
package hello.world;
import java.lang.Exception;
import org.noresponse.NoResponse;
import org.noresponse.models.errors.AuthenticationException;
import org.noresponse.models.errors.BadRequestException;
import org.noresponse.models.errors.ConflictException;
import org.noresponse.models.errors.NotFoundException;
import org.noresponse.models.errors.PermissionDeniedException;
import org.noresponse.models.errors.RateLimitException;
import org.noresponse.models.operations.ListWebhookEndpointsResponse;
public class Application {
public static void main(String[] args) throws Exception {
NoResponse sdk = NoResponse.builder()
.apiKey(System.getenv().getOrDefault("NORESPONSE_API_KEY", ""))
.build();
ListWebhookEndpointsResponse res = sdk.webhookEndpoints().list()
.call();
if (res.webhookEndpointList().isPresent()) {
System.out.println(res.webhookEndpointList().get());
}
}
}
using NoResponse;
using NoResponse.Models.Shared;
using System;
var sdk = new NoResponseClient(apiKey: Environment.GetEnvironmentVariable("NORESPONSE_API_KEY"));
var res = await sdk.WebhookEndpoints.ListAsync();
// handle response
<?php
declare(strict_types=1);
require 'vendor/autoload.php';
use NoResponse;
$sdk = NoResponse\NoResponseClient::builder()
->setSecurity(
getenv('NORESPONSE_API_KEY') ?: ''
)
->build();
$response = $sdk->webhookEndpoints->list(
);
if ($response->webhookEndpointList !== null) {
// handle response
}
require 'noresponse'
Models = ::NoResponse::Models
s = ::NoResponse::NoResponseClient.new(
api_key: ENV.fetch('NORESPONSE_API_KEY', '')
)
res = s.webhook_endpoints.list
unless res.nil?
# handle response
end
{
"items": [
{
"endpoint_id": "whe_01JA2ZD0E1F2G3H4J5K6M7N8P9",
"url": "https://hooks.example.com/noresponse",
"state": "verified",
"response_mode": "standard",
"created_at": "2026-10-22T09:00:00.000Z",
"verified_at": "2026-10-22T09:00:05.000Z",
"signing_keys": [
{
"key_id": "whk_01JA2Z9A1B2C3D4E5F6G7H8J9K",
"created_at": "2026-10-22T09:00:00.000Z",
"expires_at": "2026-10-29T10:00:00.000Z"
},
{
"key_id": "whk_01JA2ZD1M2N3P4Q5R6S7T8V9W0",
"created_at": "2026-10-22T10:00:00.000Z"
}
]
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 401,
"detail": "<string>",
"code": "unauthorized",
"request_id": "<string>",
"instance": "<string>",
"invalid_params": [
{
"field": "<string>",
"reason": "<string>",
"example": "<string>"
}
]
}{
"type": "https://docs.noresponse.org/problems/workspace-forbidden",
"title": "Forbidden",
"status": 403,
"detail": "The API key does not carry a scope this operation accepts.",
"code": "workspace_forbidden",
"request_id": "0123456789abcdef0123456789abcdef"
}{
"type": "https://docs.noresponse.org/problems/rate-limited",
"title": "Rate limited",
"status": 429,
"detail": "The tenant's assessment rate is exhausted; retry after the Retry-After interval.",
"code": "rate_limited",
"request_id": "0123456789abcdef0123456789abcdef"
}{
"type": "<string>",
"title": "<string>",
"status": 503,
"detail": "<string>",
"code": "service_unavailable",
"request_id": "<string>",
"instance": "<string>",
"invalid_params": [
{
"field": "<string>",
"reason": "<string>",
"example": "<string>"
}
]
}Authorizations
Your API key, sent as Authorization: Bearer <key>. A key is nrk_live_ or nrk_test_, a 26-character key id, _ and a 43-character secret. A key sees only its own environment's data.
Each key has one or more scopes: assess creates and reads assessments, records outcomes and reports key usage; history reads assessments, an account's current risk and an account's history, and erases an account; detailed adds the detailed view; webhooks registers, tests, rotates and deletes webhook endpoints; integrations registers and manages hosted provider integrations. A missing, unknown, revoked or expired key answers 401. A valid key without the scope an operation needs answers 403.
Response
Every endpoint of the calling workspace.
GET /v1/webhooks answer: every endpoint of the calling workspace, in every state, ordered by endpoint_id. A workspace holds at most 5, so there is no page.
5Show child attributes
Show child attributes