SubblySubbly
Log inGet started
  • Get started
  • Developer resources
Private API reference
Docs
Information
    Base URLAuthenticationPaginationErrors
Customer
    Get list of customersCreate a customerGet customer by IDUpdate a customerDelete a customerChange a customer's store credit balanceCreate a customer noteUpdate a customer noteDelete a customer note
Address
    Create an addressUpdate an addressDelete an address
Pickup Info
    Get list of pickup infoCreate pickup infoUpdate pickup infoDelete pickup info
Subscription
    Get list of subscriptionsCreate a subscriptionGet subscription by IDUpdate a subscriptionCancel a subscriptionUndo cancellationPause a subscriptionResume a subscriptionSkip renewals until a dateReactivate a cancelled or expired subscriptionSwitch the subscription to another plan by starting overChange the plans of the subscription's itemsUpdate a subscription's shipping address and methodUpdate a subscription's payment methodUpdate a subscription's survey preferencesCreate a subscription itemShow a subscription itemUpdate a subscription itemRemove a subscription itemUpdate a subscription item's preferencesUpdate a subscription item's bundleChange the plan of a subscription itemChange the variant of a one-time itemApply a discount to a subscription itemRemove a subscription item discountApply a discount to a subscriptionRemove a subscription discount
Invoice
    Get list of invoicesGet invoice by IDSchedule the next payment for invoiceVoid an invoiceForgive an invoiceMark an invoice as paid
Order
    Get list of ordersGet order by IDUpdate an orderShip an orderCancel an orderMark an order as pendingArchive an orderMark an order as a future shipmentSync order shipping items
Payment Method
    Create a payment methodGet payment method by IDDelete a payment method
Transaction
    Get list of transactionsGet transaction by ID
Cancellation
    Get shop cancellation reasons
Product
    Get list of productsGet product by IDGet variant by IDUpdate variantGet plan by IDUpdate planCreate subscription productUpdate subscription productPublish subscription productUnpublish subscription productArchive subscription productSync subscription product metadataCreate one-time productUpdate one-time productPublish one-time productUnpublish one-time productArchive one-time productSync one-time product metadataCreate variantArchive variantBatch create/update/archive variantsCreate planArchive plan
Survey
    Get survey by IDGet list of surveys
Bundle
    Get list of bundlesCreate a new bundleGet bundle by IDUpdate a bundleGet list of bundle itemsCreate a bundle itemBatch create bundle itemsGet bundle item by IDUpdate a bundle itemDelete a bundle itemGet list of bundle groupsPublish a bundleUnpublish a bundleArchive a bundleSync bundle metadataCreate a bundle planGet bundle plan by IDUpdate a bundle planArchive a bundle plan
Tag
    Get list of tags
Metafield
    Get shop's metafieldsCreate a new metadataUpdate the metadata
Funnel
    Get list of funnelsGet funnel by ID
Option
    Get list of options
Country
    Get list of countries
Inventory
    Get list of inventory itemsCreate a new inventory itemGet inventory item by IDUpdate an inventory itemArchive an inventory itemGet list of inventory groupsCreate a new inventory groupGet inventory group by IDUpdate an inventory group
Coupon
    Get list of couponsCreate a couponGet coupon by IDUpdate a couponArchive a coupon
Product Collection
    Get list of product collectionsCreate a product collectionGet product collection by IDUpdate a product collectionPublish a product collectionUnpublish a product collectionArchive a product collectionGet list of collection groups with itemsSync collection items
Webhook
    Get list of webhook endpointsCreate a webhook endpointGet webhook delivery statisticsGet a webhook endpointUpdate a webhook endpointDelete a webhook endpointRotate the signing secretSend a test eventGet webhook deliveriesGet a delivery with its attemptsRetry a delivery manuallyGet the webhook event logGet one event with its deliveries across endpointsGet the catalogue of subscribable event types
Email Unsubscribe
    Unsubscribe an email address from marketing mail

Webhook

Private Webhook API endpoints (endpoints, deliveries, event log)

Endpoints
  • GET/webhooks/endpoints
  • POST/webhooks/endpoints
  • GET/webhooks/stats
  • GET/webhooks/endpoints/{webhook_endpoint_id}
  • PATCH/webhooks/endpoints/{webhook_endpoint_id}
  • DELETE/webhooks/endpoints/{webhook_endpoint_id}
  • POST/webhooks/endpoints/{webhook_endpoint_id}/rotate_secret
  • POST/webhooks/endpoints/{webhook_endpoint_id}/ping
  • GET/webhooks/deliveries
  • GET/webhooks/deliveries/{delivery_id}
  • POST/webhooks/deliveries/{delivery_id}/retry
  • GET/webhooks/events
  • GET/webhooks/events/{event_id}
  • GET/webhooks/event_types

Get list of webhook endpoints

GET /webhooks/endpoints

Query parameters

pageoptionalinteger
per_pageoptionalinteger
statusoptionalstring

Possible values: enabled, disabled.

Returnsobject

Webhook endpoints list response

curl https://api.subbly.co/private/v1/webhooks/endpoints \ -H 'X-API-KEY: <api-key>'
Response
{ "pagination": { "current_page": 1, "last_page": 2, "from": 1, "to": 1, "total": 20 }, "data": [ { "id": "whe_01K4A2YQ3F8H1J2K3L4M5N6P7Q", "url": "https://merchant.example.com/subbly/hooks", "description": "Fulfilment service", "status": "enabled", "disabled_reason": null, "disabled_at": null, "enabled_events": [ "subscription.*", "invoice.paid", "order.shipped" ], "api_version": "2026-09-01", "alert_email": "dev-alerts@merchant.example.com", "failing_since": null, "consecutive_failures": 0, "last_success_at": "2026-09-02T11:02:07.000000Z", "last_failure_at": null, "previous_secret_expires_at": null, "created_at": "2026-09-02T10:14:31.000000Z", "updated_at": "2026-09-02T10:14:31.000000Z" } ] }

Create a webhook endpoint

POST /webhooks/endpoints

Generates the signing secret and returns it once in the response; it is never shown again. Fails with 400 webhook_endpoints_limit_reached when the shop already keeps the configured maximum number of endpoints (30).

Request body

urlRequiredstring

Absolute https URL of the receiver. Must not contain credentials or a fragment and must not resolve to a private or reserved address.

enabled_eventsRequiredstring[]

Exact event types (invoice.paid), prefix wildcards (subscription.*, subscription.item.*) or the catch-all *. See GET /webhooks/event_types.

descriptionoptionalstring | null
alert_emailoptionalstring | null

Format: email.

ReturnsWebhookEndpointWithSecret

Webhook endpoint created, secret included

Error responses

400object

The shop already keeps the maximum number of webhook endpoints

422object

Validation failed

curl -X POST https://api.subbly.co/private/v1/webhooks/endpoints \ -H 'X-API-KEY: <api-key>' \ -H 'Content-Type: application/json' \ -d '{ "url": "url", "enabled_events": [ "enabled_events" ], "description": "description", "alert_email": "customer@example.com" }'
Response
{ "id": "whe_01K4A2YQ3F8H1J2K3L4M5N6P7Q", "url": "https://merchant.example.com/subbly/hooks", "description": "Fulfilment service", "status": "enabled", "disabled_reason": null, "disabled_at": null, "enabled_events": [ "subscription.*", "invoice.paid", "order.shipped" ], "api_version": "2026-09-01", "alert_email": "dev-alerts@merchant.example.com", "failing_since": null, "consecutive_failures": 0, "last_success_at": "2026-09-02T11:02:07.000000Z", "last_failure_at": null, "previous_secret_expires_at": null, "created_at": "2026-09-02T10:14:31.000000Z", "updated_at": "2026-09-02T10:14:31.000000Z", "secret": "whsec_MfKQ9r8GKYqrTwjUPD8ILPZIo2LaLaSwq1Xb7sY=" }

Get webhook delivery statistics

GET /webhooks/stats

Shop-level counters (endpoints in use against the limit, deliveries and successes of the last 24 hours, deliveries still scheduled and the earliest next attempt, endpoints with a failing streak) plus one row per live endpoint with its 7-day counts, failing flag, projected auto-disable time and last delivery.

ReturnsWebhookEndpointStats

Webhook endpoint statistics

curl https://api.subbly.co/private/v1/webhooks/stats \ -H 'X-API-KEY: <api-key>'
Response
{ "endpoints_count": 3, "endpoints_limit": 30, "deliveries_24h": 412, "succeeded_24h": 409, "scheduled_deliveries": 2, "next_attempt_at": "2026-10-12T14:33:07Z", "failing_endpoints": 1, "endpoints": [ { "id": "whe_01K4A2Z9R1S2T3U4V5W6X7Y8Z9", "deliveries_7d": 120, "succeeded_7d": 118, "failing": false, "auto_disable_at": null, "last_delivery": { "status": "scheduled", "status_code": 200, "error_code": null, "created_at": "2026-10-12T14:31:58Z" } } ] }

Get a webhook endpoint

GET /webhooks/endpoints/{webhook_endpoint_id}

Health fields included; the secret is never returned.

Path parameters

webhook_endpoint_idRequiredstring

ReturnsWebhookEndpoint

Webhook endpoint response

Error responses

404object

Webhook endpoint, delivery or event not found for this shop

curl https://api.subbly.co/private/v1/webhooks/endpoints/{webhook_endpoint_id} \ -H 'X-API-KEY: <api-key>'
Response
{ "id": "whe_01K4A2YQ3F8H1J2K3L4M5N6P7Q", "url": "https://merchant.example.com/subbly/hooks", "description": "Fulfilment service", "status": "enabled", "disabled_reason": null, "disabled_at": null, "enabled_events": [ "subscription.*", "invoice.paid", "order.shipped" ], "api_version": "2026-09-01", "alert_email": "dev-alerts@merchant.example.com", "failing_since": null, "consecutive_failures": 0, "last_success_at": "2026-09-02T11:02:07.000000Z", "last_failure_at": null, "previous_secret_expires_at": null, "created_at": "2026-09-02T10:14:31.000000Z", "updated_at": "2026-09-02T10:14:31.000000Z" }

Update a webhook endpoint

PATCH /webhooks/endpoints/{webhook_endpoint_id}

Replace the subscription list with enabled_events, or change it incrementally with add_events / remove_events; the two styles cannot be combined in one request. Disabling an endpoint marks its scheduled and queued deliveries as skipped (an attempt already in flight finishes); enabling resets the failure counters. Enabling may carry resend_since: every skipped or failed delivery of the endpoint created at or after that time goes back to scheduled (due now, attempt count kept) and the response gains meta.resent_deliveries with the number of rows re-scheduled. resend_since is rejected (422) unless status is enabled in the same request.

Path parameters

webhook_endpoint_idRequiredstring

Request body

urloptionalstring
descriptionoptionalstring | null
alert_emailoptionalstring | null

Format: email.

statusoptionalstring

Possible values: enabled, disabled.

resend_sinceoptionalstring | null

Only together with status: enabled. UTC, same format as the delivery list filters (Y-m-d\TH:i:s). Re-schedules the endpoint's skipped and failed deliveries created at or after this time.

Format: date-time.

enabled_eventsoptionalstring[]
add_eventsoptionalstring[]
remove_eventsoptionalstring[]

Returnsobject

Webhook endpoint updated. meta is present only when the request carried resend_since.

Error responses

404object

Webhook endpoint, delivery or event not found for this shop

422object

Validation failed

curl -X PATCH https://api.subbly.co/private/v1/webhooks/endpoints/{webhook_endpoint_id} \ -H 'X-API-KEY: <api-key>' \ -H 'Content-Type: application/json' \ -d '{ "url": "url", "description": "description", "alert_email": "customer@example.com", "status": "enabled", "resend_since": "2026-09-16T14:00:00", "enabled_events": [ "enabled_events" ], "add_events": [ "add_events" ], "remove_events": [ "remove_events" ] }'
Response
{ "id": "whe_01K4A2YQ3F8H1J2K3L4M5N6P7Q", "url": "https://merchant.example.com/subbly/hooks", "description": "Fulfilment service", "status": "enabled", "disabled_reason": null, "disabled_at": null, "enabled_events": [ "subscription.*", "invoice.paid", "order.shipped" ], "api_version": "2026-09-01", "alert_email": "dev-alerts@merchant.example.com", "failing_since": null, "consecutive_failures": 0, "last_success_at": "2026-09-02T11:02:07.000000Z", "last_failure_at": null, "previous_secret_expires_at": null, "created_at": "2026-09-02T10:14:31.000000Z", "updated_at": "2026-09-02T10:14:31.000000Z", "meta": { "resent_deliveries": 4 } }

Delete a webhook endpoint

DELETE /webhooks/endpoints/{webhook_endpoint_id}

Soft delete. Scheduled and queued deliveries become skipped with reason endpoint_disabled. All its deliveries stay listed, filterable by its id and readable; a retry of one is a 409 endpoint_disabled.

Path parameters

webhook_endpoint_idRequiredstring

ReturnsWebhookEndpoint

The deleted webhook endpoint

Error responses

404object

Webhook endpoint, delivery or event not found for this shop

curl -X DELETE https://api.subbly.co/private/v1/webhooks/endpoints/{webhook_endpoint_id} \ -H 'X-API-KEY: <api-key>'
Response
{ "id": "whe_01K4A2YQ3F8H1J2K3L4M5N6P7Q", "url": "https://merchant.example.com/subbly/hooks", "description": "Fulfilment service", "status": "enabled", "disabled_reason": null, "disabled_at": null, "enabled_events": [ "subscription.*", "invoice.paid", "order.shipped" ], "api_version": "2026-09-01", "alert_email": "dev-alerts@merchant.example.com", "failing_since": null, "consecutive_failures": 0, "last_success_at": "2026-09-02T11:02:07.000000Z", "last_failure_at": null, "previous_secret_expires_at": null, "created_at": "2026-09-02T10:14:31.000000Z", "updated_at": "2026-09-02T10:14:31.000000Z" }

Rotate the signing secret

POST /webhooks/endpoints/{webhook_endpoint_id}/rotate_secret

Returns the new secret once. The previous secret keeps verifying deliveries until previous_secret_expires_at; pass grace_period_seconds: 0 to drop it immediately.

Path parameters

webhook_endpoint_idRequiredstring

Request body (optional)

grace_period_secondsoptionalinteger

Defaults to 86400.

ReturnsWebhookEndpointWithSecret

Webhook endpoint with the new secret

Error responses

404object

Webhook endpoint, delivery or event not found for this shop

422object

Validation failed

curl -X POST https://api.subbly.co/private/v1/webhooks/endpoints/{webhook_endpoint_id}/rotate_secret \ -H 'X-API-KEY: <api-key>' \ -H 'Content-Type: application/json' \ -d '{ "grace_period_seconds": 86400 }'
Response
{ "id": "whe_01K4A2YQ3F8H1J2K3L4M5N6P7Q", "url": "https://merchant.example.com/subbly/hooks", "description": "Fulfilment service", "status": "enabled", "disabled_reason": null, "disabled_at": null, "enabled_events": [ "subscription.*", "invoice.paid", "order.shipped" ], "api_version": "2026-09-01", "alert_email": "dev-alerts@merchant.example.com", "failing_since": null, "consecutive_failures": 0, "last_success_at": "2026-09-02T11:02:07.000000Z", "last_failure_at": null, "previous_secret_expires_at": null, "created_at": "2026-09-02T10:14:31.000000Z", "updated_at": "2026-09-02T10:14:31.000000Z", "secret": "whsec_MfKQ9r8GKYqrTwjUPD8ILPZIo2LaLaSwq1Xb7sY=" }

Send a test event

POST /webhooks/endpoints/{webhook_endpoint_id}/ping

Records a webhook.ping event for this endpoint and sends it through the normal pipeline (render, fan-out, delivery). A ping is delivered only to the endpoint it was requested on, whatever its enabled_events say. Every newly created endpoint receives one automatically. No request body.

Path parameters

webhook_endpoint_idRequiredstring

ReturnsWebhookEndpoint

The endpoint the ping was requested on

Error responses

404object

Webhook endpoint, delivery or event not found for this shop

409object

The endpoint is disabled, so the test event would never be delivered

curl -X POST https://api.subbly.co/private/v1/webhooks/endpoints/{webhook_endpoint_id}/ping \ -H 'X-API-KEY: <api-key>'
Response
{ "id": "whe_01K4A2YQ3F8H1J2K3L4M5N6P7Q", "url": "https://merchant.example.com/subbly/hooks", "description": "Fulfilment service", "status": "enabled", "disabled_reason": null, "disabled_at": null, "enabled_events": [ "subscription.*", "invoice.paid", "order.shipped" ], "api_version": "2026-09-01", "alert_email": "dev-alerts@merchant.example.com", "failing_since": null, "consecutive_failures": 0, "last_success_at": "2026-09-02T11:02:07.000000Z", "last_failure_at": null, "previous_secret_expires_at": null, "created_at": "2026-09-02T10:14:31.000000Z", "updated_at": "2026-09-02T10:14:31.000000Z" }

Get webhook deliveries

GET /webhooks/deliveries

Deliveries of the shop, newest first, across every endpoint, deleted endpoints included. Narrow them to one endpoint with endpoint_id or to one event with event_id.

Query parameters

endpoint_idoptionalstring

The endpoint's public id; a deleted endpoint's id is accepted.

event_idoptionalstring
pageoptionalinteger
per_pageoptionalinteger
statusoptionalstring

Possible values: scheduled, queued, in_flight, succeeded, failed, skipped.

event_typeoptionalstring
created_at[gte]optionalstring

Format: date-time.

created_at[lte]optionalstring

Format: date-time.

Returnsobject

Deliveries list response

Error responses

404object

Webhook endpoint, delivery or event not found for this shop

curl https://api.subbly.co/private/v1/webhooks/deliveries \ -H 'X-API-KEY: <api-key>'
Response
{ "pagination": { "current_page": 1, "last_page": 2, "from": 1, "to": 1, "total": 20 }, "data": [ { "id": "dlv_01K4A2Z9R1S2T3U4V5W6X7Y8Z9", "event_id": "evt_01K4A2Z8Q7X3M9WB6Y5V4T2R1P", "endpoint_id": "whe_01K4A2YQ3F8H1J2K3L4M5N6P7Q", "event_type": "subscription.cancelled", "status": "succeeded", "failure_reason": null, "attempt_count": 1, "next_attempt_at": null, "last_status_code": 200, "last_error_code": null, "delivered_at": "2026-09-02T10:14:32.104000Z", "created_at": "2026-09-02T10:14:31.000000Z", "updated_at": "2026-09-02T10:14:32.000000Z" } ] }

Get a delivery with its attempts

GET /webhooks/deliveries/{delivery_id}

Path parameters

delivery_idRequiredstring

ReturnsWebhookDeliveryWithAttempts

Delivery response

Error responses

404object

Webhook endpoint, delivery or event not found for this shop

curl https://api.subbly.co/private/v1/webhooks/deliveries/{delivery_id} \ -H 'X-API-KEY: <api-key>'
Response
{ "id": "dlv_01K4A2Z9R1S2T3U4V5W6X7Y8Z9", "event_id": "evt_01K4A2Z8Q7X3M9WB6Y5V4T2R1P", "endpoint_id": "whe_01K4A2YQ3F8H1J2K3L4M5N6P7Q", "event_type": "subscription.cancelled", "status": "succeeded", "failure_reason": null, "attempt_count": 1, "next_attempt_at": null, "last_status_code": 200, "last_error_code": null, "delivered_at": "2026-09-02T10:14:32.104000Z", "created_at": "2026-09-02T10:14:31.000000Z", "updated_at": "2026-09-02T10:14:32.000000Z", "attempts": [ { "attempt_no": 1, "trigger_type": "scheduled", "status_code": 500, "error_code": "timeout", "error_message": "Internal Server Error", "response_body": "{\"error\":\"boom\"}", "response_headers": { "content-type": "application/json" }, "duration_ms": 812, "attempted_at": "2026-09-02T10:14:31.250000Z" } ] }

Retry a delivery manually

POST /webhooks/deliveries/{delivery_id}/retry

One more attempt of a succeeded, failed or skipped delivery of an enabled, not deleted endpoint. The row goes to queued (failure_reason cleared, attempt_count kept) and is handed to the delivery workers once the change is saved; the response shows the row as queued with its attempts so far. The attempt is a single manual try: a retryable failure of a delivery whose attempts are already spent finalises it as failed / exhausted again, a success is a success. A delivery that is still scheduled, queued or in_flight is a 409 delivery_already_scheduled; a disabled or deleted endpoint is a 409 endpoint_disabled. Rate limited to 60 requests per minute per shop. No request body.

Path parameters

delivery_idRequiredstring

ReturnsWebhookDeliveryWithAttempts

The delivery, queued for the manual attempt

Error responses

404object

Webhook endpoint, delivery or event not found for this shop

409object

The delivery cannot be retried in its current state

429object

More than 60 manual retries in one minute for this shop

curl -X POST https://api.subbly.co/private/v1/webhooks/deliveries/{delivery_id}/retry \ -H 'X-API-KEY: <api-key>'
Response
{ "id": "dlv_01K4A2Z9R1S2T3U4V5W6X7Y8Z9", "event_id": "evt_01K4A2Z8Q7X3M9WB6Y5V4T2R1P", "endpoint_id": "whe_01K4A2YQ3F8H1J2K3L4M5N6P7Q", "event_type": "subscription.cancelled", "status": "succeeded", "failure_reason": null, "attempt_count": 1, "next_attempt_at": null, "last_status_code": 200, "last_error_code": null, "delivered_at": "2026-09-02T10:14:32.104000Z", "created_at": "2026-09-02T10:14:31.000000Z", "updated_at": "2026-09-02T10:14:32.000000Z", "attempts": [ { "attempt_no": 1, "trigger_type": "scheduled", "status_code": 500, "error_code": "timeout", "error_message": "Internal Server Error", "response_body": "{\"error\":\"boom\"}", "response_headers": { "content-type": "application/json" }, "duration_ms": 812, "attempted_at": "2026-09-02T10:14:31.250000Z" } ] }

Get the webhook event log

GET /webhooks/events

Returns the stored envelope of each event, newest first. type and types[] are mutually exclusive. delivered=0 returns events with at least one delivery that has not succeeded; delivered=1 returns events whose deliveries all succeeded.

Query parameters

pageoptionalinteger
per_pageoptionalinteger
typeoptionalstring
types[]optionalstring[]
created_at[gte]optionalstring

Format: date-time.

created_at[lte]optionalstring

Format: date-time.

deliveredoptionalinteger

Possible values: 1, 0.

Returnsobject

Event log response

curl https://api.subbly.co/private/v1/webhooks/events \ -H 'X-API-KEY: <api-key>'
Response
{ "pagination": { "current_page": 1, "last_page": 2, "from": 1, "to": 1, "total": 20 }, "data": [ { "id": "evt_01K4A2Z8Q7X3M9WB6Y5V4T2R1P", "object": "event", "type": "subscription.cancelled", "api_version": "2026-09-01", "created_at": "2026-09-02T10:14:31.204Z", "shop_id": 5250, "source": { "channel": "private_api", "request_id": null }, "subject": { "type": "subscription", "id": 9931, "url": "/private/v1/subscriptions/9931" }, "entity": { "type": "discount", "id": 4410 }, "data": {}, "status": "dispatched" } ] }

Get one event with its deliveries across endpoints

GET /webhooks/events/{event_id}

Path parameters

event_idRequiredstring

ReturnsWebhookEventWithDeliveries

Event response

Error responses

404object

Webhook endpoint, delivery or event not found for this shop

curl https://api.subbly.co/private/v1/webhooks/events/{event_id} \ -H 'X-API-KEY: <api-key>'
Response
{ "id": "evt_01K4A2Z8Q7X3M9WB6Y5V4T2R1P", "object": "event", "type": "subscription.cancelled", "api_version": "2026-09-01", "created_at": "2026-09-02T10:14:31.204Z", "shop_id": 5250, "source": { "channel": "private_api", "request_id": null }, "subject": { "type": "subscription", "id": 9931, "url": "/private/v1/subscriptions/9931" }, "entity": { "type": "discount", "id": 4410 }, "data": {}, "status": "dispatched", "deliveries": [ { "id": "dlv_01K4A2Z9R1S2T3U4V5W6X7Y8Z9", "event_id": "evt_01K4A2Z8Q7X3M9WB6Y5V4T2R1P", "endpoint_id": "whe_01K4A2YQ3F8H1J2K3L4M5N6P7Q", "event_type": "subscription.cancelled", "status": "succeeded", "failure_reason": null, "attempt_count": 1, "next_attempt_at": null, "last_status_code": 200, "last_error_code": null, "delivered_at": "2026-09-02T10:14:32.104000Z", "created_at": "2026-09-02T10:14:31.000000Z", "updated_at": "2026-09-02T10:14:32.000000Z" } ] }

Get the catalogue of subscribable event types

GET /webhooks/event_types

Query parameters

subject_typeoptionalstring

Only event types whose payload describes this resource (order, invoice, subscription, subscription_item, ...).

typeoptionalstring

An exact event type or a prefix wildcard such as subscription.* (the enabled_events grammar).

searchoptionalstring

Case-insensitive substring of the event name.

ReturnsWebhookEventType[]

Event types response (a plain array, not paginated)

curl https://api.subbly.co/private/v1/webhooks/event_types \ -H 'X-API-KEY: <api-key>'
Response
[ { "name": "subscription.cancelled", "subject_type": "subscription" } ]
paginationobject
dataWebhookEndpoint[]
idstring
urlstring
descriptionstring | null
statusstring

Possible values: enabled, disabled.

disabled_reasonstring | null

Possible values: manual, failing, gone, blocked, plan, null.

disabled_atstring | null

Format: date-time.

enabled_eventsstring[]
api_versionstring
alert_emailstring | null
failing_sincestring | null

Format: date-time.

consecutive_failuresinteger
last_success_atstring | null

Format: date-time.

last_failure_atstring | null

Format: date-time.

previous_secret_expires_atstring | null

Set while a rotated-out secret is still accepted.

Format: date-time.

created_atstring

Format: date-time.

updated_atstring

Format: date-time.

secretstring

Shown only in create and rotate responses.

endpoints_countinteger

Live (not deleted) endpoints of the shop

endpoints_limitinteger
deliveries_24hinteger
succeeded_24hinteger
scheduled_deliveriesinteger

Deliveries still waiting for an attempt

next_attempt_atstring | null

Format: date-time.

failing_endpointsinteger

Enabled endpoints with a failing streak

endpointsobject[]
idstring
urlstring
descriptionstring | null
statusstring

Possible values: enabled, disabled.

disabled_reasonstring | null

Possible values: manual, failing, gone, blocked, plan, null.

disabled_atstring | null

Format: date-time.

enabled_eventsstring[]
api_versionstring
alert_emailstring | null
failing_sincestring | null

Format: date-time.

consecutive_failuresinteger
last_success_atstring | null

Format: date-time.

last_failure_atstring | null

Format: date-time.

previous_secret_expires_atstring | null

Set while a rotated-out secret is still accepted.

Format: date-time.

created_atstring

Format: date-time.

updated_atstring

Format: date-time.

idstring
urlstring
descriptionstring | null
statusstring

Possible values: enabled, disabled.

disabled_reasonstring | null

Possible values: manual, failing, gone, blocked, plan, null.

disabled_atstring | null

Format: date-time.

enabled_eventsstring[]
api_versionstring
alert_emailstring | null
failing_sincestring | null

Format: date-time.

consecutive_failuresinteger
last_success_atstring | null

Format: date-time.

last_failure_atstring | null

Format: date-time.

previous_secret_expires_atstring | null

Set while a rotated-out secret is still accepted.

Format: date-time.

created_atstring

Format: date-time.

updated_atstring

Format: date-time.

metaobject
idstring
urlstring
descriptionstring | null
statusstring

Possible values: enabled, disabled.

disabled_reasonstring | null

Possible values: manual, failing, gone, blocked, plan, null.

disabled_atstring | null

Format: date-time.

enabled_eventsstring[]
api_versionstring
alert_emailstring | null
failing_sincestring | null

Format: date-time.

consecutive_failuresinteger
last_success_atstring | null

Format: date-time.

last_failure_atstring | null

Format: date-time.

previous_secret_expires_atstring | null

Set while a rotated-out secret is still accepted.

Format: date-time.

created_atstring

Format: date-time.

updated_atstring

Format: date-time.

idstring
urlstring
descriptionstring | null
statusstring

Possible values: enabled, disabled.

disabled_reasonstring | null

Possible values: manual, failing, gone, blocked, plan, null.

disabled_atstring | null

Format: date-time.

enabled_eventsstring[]
api_versionstring
alert_emailstring | null
failing_sincestring | null

Format: date-time.

consecutive_failuresinteger
last_success_atstring | null

Format: date-time.

last_failure_atstring | null

Format: date-time.

previous_secret_expires_atstring | null

Set while a rotated-out secret is still accepted.

Format: date-time.

created_atstring

Format: date-time.

updated_atstring

Format: date-time.

secretstring

Shown only in create and rotate responses.

idstring
urlstring
descriptionstring | null
statusstring

Possible values: enabled, disabled.

disabled_reasonstring | null

Possible values: manual, failing, gone, blocked, plan, null.

disabled_atstring | null

Format: date-time.

enabled_eventsstring[]
api_versionstring
alert_emailstring | null
failing_sincestring | null

Format: date-time.

consecutive_failuresinteger
last_success_atstring | null

Format: date-time.

last_failure_atstring | null

Format: date-time.

previous_secret_expires_atstring | null

Set while a rotated-out secret is still accepted.

Format: date-time.

created_atstring

Format: date-time.

updated_atstring

Format: date-time.

paginationobject
dataWebhookDelivery[]
idstring
event_idstring
endpoint_idstring

The endpoint's public id; it may name an endpoint deleted since.

event_typestring
statusstring

scheduled waits for next_attempt_at, queued is handed to the delivery workers, in_flight is being attempted; succeeded, failed and skipped are final.

Possible values: scheduled, queued, in_flight, succeeded, failed, skipped.

failure_reasonstring | null

Possible values: exhausted, gone, blocked, endpoint_disabled, null.

attempt_countinteger
next_attempt_atstring | null

Format: date-time.

last_status_codeinteger | null
last_error_codestring | null
delivered_atstring | null

Format: date-time.

created_atstring

Format: date-time.

updated_atstring

Format: date-time.

attemptsWebhookDeliveryAttempt[]
idstring
event_idstring
endpoint_idstring

The endpoint's public id; it may name an endpoint deleted since.

event_typestring
statusstring

scheduled waits for next_attempt_at, queued is handed to the delivery workers, in_flight is being attempted; succeeded, failed and skipped are final.

Possible values: scheduled, queued, in_flight, succeeded, failed, skipped.

failure_reasonstring | null

Possible values: exhausted, gone, blocked, endpoint_disabled, null.

attempt_countinteger
next_attempt_atstring | null

Format: date-time.

last_status_codeinteger | null
last_error_codestring | null
delivered_atstring | null

Format: date-time.

created_atstring

Format: date-time.

updated_atstring

Format: date-time.

attemptsWebhookDeliveryAttempt[]
paginationobject
dataWebhookEvent[]
idstring
objectstring
typestring
api_versionstring
created_atstring

Format: date-time.

shop_idinteger
sourceobject
subjectobject
entityobject | null

The record inside the subject that the event is about. The subject is always the object in data; a change to one of its records names that record here: the item of subscription.item.*, order.item.* and invoice.item.*, the plan of bundle.plan.*, the discount of subscription.discount.*, the shipping item of order.shipping_item.*, the fulfillment of order.fulfillment.created, the referral balance of customer.balance.updated, the cart (subbly-api checkout) or discount (applied to a subscription) of coupon.redeemed, the address of customer.address.*. null when the event names no such record.

dataobject | null

The private-API resource of the subject as of created_at.

statusstring

pending until the payload is rendered and the deliveries are created, dispatched after that, failed when rendering failed on every allowed attempt (no deliveries are created).

Possible values: pending, dispatched, failed.

deliveriesWebhookDelivery[]
namestring
subject_typestring