Skip to content

Create a webhook endpoint

POST
/v1/webhooks
curl --request POST \
--url https://api-staging.asqary.com/v1/webhooks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "url": "https://lender.example.com/asqary/webhooks", "description": "example", "events": [ "*" ] }'

Registers an HTTPS URL to receive events in the key’s environment (at most 10 per environment). The response includes the signing secret; store it, as it is never shown again. Requires webhooks:manage.

Media typeapplication/json
object
url
required

HTTPS URL on a public address.

string format: uri
<= 2048 characters

Example

https://lender.example.com/asqary/webhooks
description
string
<= 200 characters
events
required
Array<string>
>= 1 items
Allowed values: * backtest.completed backtest.failed policy.activated policy.archived

Created, with its signing secret

Media typeapplication/json
object
webhook_id
required
string
/^wh_[0-9a-f]{32}$/
url
required
string
description
required
string | null
events
required
Array<string>
Allowed values: * backtest.completed backtest.failed policy.activated policy.archived
status
required
string
Allowed values: enabled disabled
disabled_reason
required
string | null
failing_since
required

When deliveries started failing. The endpoint is disabled after three days of failures.

string | null format: date-time
environment
required
string
Allowed values: live test
previous_secret_expires_at

Set after a rotation while the old secret still signs deliveries.

string | null format: date-time
created_at
required
string format: date-time
updated_at
required
string format: date-time
secret
required

Signing secret. Shown only once.

string
/^whsec_[A-Za-z0-9_-]{43}$/

Example

{
"events": [
"*"
],
"status": "enabled",
"environment": "live"
}

Malformed request (invalid_request), including unknown fields.

Media typeapplication/json
object
error_code
required

Invalid_request, unauthorized, key_expired, key_revoked, forbidden, ip_not_allowed, quota_exceeded, not_found, method_not_allowed, conflict, policy_in_use, policy_active, policy_archived, idempotency_key_reused, validation_failed, rule_not_available, backtest_invalid_rows, backtest_too_large, rate_limited, internal_error

string
message
required
string
retryable
required
boolean
request_id
string
details
One of:
Array<object>
object
field
required
string
message
required
string
code
string

Example generated

{
"error_code": "example",
"message": "example",
"retryable": true,
"request_id": "example",
"details": {}
}

Missing scope or role, IP not allowed, or monthly quota exceeded (quota_exceeded).

Media typeapplication/json
object
error_code
required

Invalid_request, unauthorized, key_expired, key_revoked, forbidden, ip_not_allowed, quota_exceeded, not_found, method_not_allowed, conflict, policy_in_use, policy_active, policy_archived, idempotency_key_reused, validation_failed, rule_not_available, backtest_invalid_rows, backtest_too_large, rate_limited, internal_error

string
message
required
string
retryable
required
boolean
request_id
string
details
One of:
Array<object>
object
field
required
string
message
required
string
code
string

Example generated

{
"error_code": "example",
"message": "example",
"retryable": true,
"request_id": "example",
"details": {}
}

validation_failed (details: field errors), rule_not_available, or backtest_invalid_rows.

Media typeapplication/json
object
error_code
required

Invalid_request, unauthorized, key_expired, key_revoked, forbidden, ip_not_allowed, quota_exceeded, not_found, method_not_allowed, conflict, policy_in_use, policy_active, policy_archived, idempotency_key_reused, validation_failed, rule_not_available, backtest_invalid_rows, backtest_too_large, rate_limited, internal_error

string
message
required
string
retryable
required
boolean
request_id
string
details
One of:
Array<object>
object
field
required
string
message
required
string
code
string

Example generated

{
"error_code": "example",
"message": "example",
"retryable": true,
"request_id": "example",
"details": {}
}