Open Connector
Subscription API

Subscription API

Configure HTTPS receivers, test delivery, enable subscriptions, and rotate signing secrets.

Subscriptions deliver selected observations to a customer-owned HTTPS receiver. Management keys and webhook signing secrets have separate roles.

Use the shared request contract for authentication, pagination, preconditions, idempotency, and common errors. Exact response members are defined in API data types and the downloadable OpenAPI contract.

List subscriptions

GET/api/v1/connector/organizations/{organization_id}/subscriptions
Scope
subscriptions:read
Auth
Bearer API key

Lists visible subscriptions without secret material or full destination URLs.

Query parameters
limitintegeroptional

Number of records; bounds are inclusive.

default50rule1–200
cursorstringoptional

Opaque continuation; preserve the original filters.

200Result

Returns a data array of Subscription records, pagination.next_cursor, and request_id.

Create a subscription

POST/api/v1/connector/organizations/{organization_id}/subscriptions
Scope
subscriptions:write
Auth
Bearer API key
Repeat calls
Organization-scoped Idempotency-Key; 24 hours

Creates a disabled receiver and reveals its initial signing secret once.

Requires Idempotency-Key.

An enabled initial value returns 422 test_required. URL validation rejects credentials, private or local addresses, unsupported schemes, and redirects. Test the saved URL before enabling.

If the one-time secret response is lost, read the subscription ID from its idempotent retry, rotate its secret, and revoke the unseen version; replay never repeats secret plaintext.

Request body
connection_idstringrequired

Connection whose approved events are delivered.

rule1–200 characters
destination_urlstringrequired

Public HTTPS receiver without credentials; private addresses and redirects are rejected.

event_typesstring[]required

Explicit types; subscription.test is reserved for test requests.

ruleAt least 1 item
enabledbooleanoptional

Creation must use false; enabling requires a successful test.

defaultfalse
201Created

Returns data as SubscriptionCreated, plus request_id.

Read a subscription

GET/api/v1/connector/organizations/{organization_id}/subscriptions/{subscription_id}
Scope
subscriptions:read
Auth
Bearer API key

Returns saved filters, destination host, enabled state, and test status.

200Result

Returns data as Subscription, plus request_id.

Update a subscription

PATCH/api/v1/connector/organizations/{organization_id}/subscriptions/{subscription_id}
Scope
subscriptions:write
Auth
Bearer API key

Updates receiver configuration or enabled state.

Requires If-Match from a current read.

Omitted fields remain unchanged. URL or filter changes disable delivery and reset test_state to not_tested; do not combine them with enabled: true. Enabling before a delivered test returns 409 test_required.

Disabling stops subsequent scheduling; in-flight attempts can already have reached the receiver.

Request body
destination_urlstringoptional

Replacement public HTTPS receiver; clears the successful test.

event_typesstring[]optional

Replacement selection; changing it clears the successful test.

ruleAt least 1 item
enabledbooleanoptional

true requires a successful test for the saved URL and filters; false stops subsequent deliveries.

200Result

Returns data as Subscription, plus request_id.

Test a subscription

POST/api/v1/connector/organizations/{organization_id}/subscriptions/{subscription_id}/test
Scope
subscriptions:write
Auth
Bearer API key
Repeat calls
Organization-scoped Idempotency-Key; 24 hours

Sends a signed synthetic subscription.test event while normal delivery is disabled.

Requires Idempotency-Key.

The test uses the saved URL and active signing secret. Poll the operation, then read the subscription for test_state: delivered. An HTTP acknowledgement proves receiver admission, not downstream processing.

Request body
reasonstringrequired

Audited reason; empty values are rejected.

rule1–2000 characters
202Accepted

Returns operation.id for operation polling and request_id; acceptance does not establish completion.

Create a signing secret

POST/api/v1/connector/organizations/{organization_id}/subscriptions/{subscription_id}/signing-secrets
Scope
subscriptions:write
Auth
Bearer API key
Repeat calls
Organization-scoped Idempotency-Key; 24 hours

Creates and activates a replacement signing version, revealed once.

Requires If-Match from a current read. Requires Idempotency-Key.

Use the subscription ETag. At most 2 versions can be active; another returns 409 secret_limit.

New attempts use the replacement. Install it in the receiver, send a test, confirm its secret ID in receiver logs, then revoke the previous version. Keep the previous verifier only until that check succeeds.

Request body
reasonstringrequired

Audited reason; empty values are rejected.

rule1–2000 characters
201Created

Returns data as SigningSecret, plus request_id.

List signing secret versions

GET/api/v1/connector/organizations/{organization_id}/subscriptions/{subscription_id}/signing-secrets
Scope
subscriptions:read
Auth
Bearer API key

Lists version IDs and creation times without plaintext.

Query parameters
limitintegeroptional

Number of records; bounds are inclusive.

default50rule1–200
cursorstringoptional

Opaque continuation; preserve the original filters.

200Result

Returns the response defined by the API data types and downloadable contract.

Revoke a signing secret

DELETE/api/v1/connector/organizations/{organization_id}/subscriptions/{subscription_id}/signing-secrets/{secret_id}
Scope
subscriptions:write
Auth
Bearer API key

Revokes the selected signing version.

Requires If-Match from a current read.

Use the subscription ETag.

Removing the last active version while enabled returns 409 secret_in_use. For a compromised last secret, disable delivery first, then revoke it. Remove the version from the receiver verifier as well.

204Removed

Returns no body.

Delete a subscription

DELETE/api/v1/connector/organizations/{organization_id}/subscriptions/{subscription_id}
Scope
subscriptions:write
Auth
Bearer API key

Deletes a disabled subscription after deliveries finish or are suppressed.

Requires If-Match from a current read.

Enabled delivery or unresolved attempts return 409 subscription_in_use. Disable, inspect deliveries, and resolve their outcomes before deletion.

204Removed

Returns no body.