Voicegram

List webhook subscriptions

Lists webhook subscriptions for the PAT's account.

On this page

Lists webhook subscriptions for the PAT's account. Includes both active (is_active=true) and soft-deleted (is_active=false) rows unless filtered.

Sort order is created_at DESC (newest first).

pagination.total counts rows matching the request's filters (account_id + source + is_active), ignoring limit/offset. Use it to determine whether further pages exist.

Never returns the plaintext secret. The plaintext was returned once in the POST 201 response and is unrecoverable from the API afterwards.

Endpoint

http
GET /api/v1/webhook-subscriptions

Authentication

Bearer Personal Access Token. See Authentication.

Query parameters

NameTypeRequiredDescription
limitintegernoPage size (1–100, default 25).
offsetintegernoPage start (zero-based, default 0).
sourceenum ("zapier", "dashboard")noFilter by source (zapier or dashboard).
is_activebooleannoFilter to active or soft-deleted rows.

Example request

curl "https://www.voicegram.io/api/v1/webhook-subscriptions?limit=25&offset=25&source=zapier&is_active=true" \
  -H "Authorization: Bearer vg_pat_<your-token>"

Responses

200OK

Subscription list with filter-aware pagination total

FieldTypeRequiredDescription
subscriptionsarray of objectyes
subscriptions[].idstring (uuid)yes
subscriptions[].urlstring (uri)yes
subscriptions[].secret_prefixstringyesFirst 12 characters of the signing secret (e.g. vg_whsec_012).
subscriptions[].channel_idstring | nullyesNull when the subscription fires for all channels.
subscriptions[].channel_typestring | nullyesNull when channel_id is null. Read-only; cannot be changed after creation.
subscriptions[].sourceenum ("zapier", "dashboard")yes
subscriptions[].zapier_subscription_idstring | nullyesPopulated for source=zapier, null for source=dashboard.
subscriptions[].is_activebooleanyesFalse once soft-deleted (via DELETE /api/v1/webhook-subscriptions/{id}) or auto-disabled after 5 consecutive failed events.
subscriptions[].consecutive_failuresintegeryesNumber of consecutive events (full retry cycles) that have failed for this subscription. Resets to 0 on any 2xx delivery. Triggers auto-disable at 5.
subscriptions[].last_delivery_atstring | nullyes
subscriptions[].last_success_atstring | nullyes
subscriptions[].last_errorstring | nullyesMost recent error excerpt, to help diagnose delivery failures.
subscriptions[].created_atstring (date-time)yes
subscriptions[].created_by_user_idstring | nullyesPopulated for source=dashboard rows (the dashboard user who created the row). Null for source=zapier rows.
paginationobjectyes
pagination.limitintegeryes
pagination.offsetintegeryes
pagination.totalintegeryesTotal row count matching the request's filters (account + source + is_active), ignoring limit/offset. Use to decide whether further pages exist.
400Bad Request

Query parameters failed validation

FieldTypeRequiredDescription
errorenum ("invalid_token", "plan_required", "validation_error", "invalid_url", "invalid_channel_id", "not_found", "rate_limited", "limit_reached", "conflict", "internal_error")yesStable error code.
messagestringnoHuman-readable error message.
reasonstringnoStable diagnostic string. Only set on invalid_url responses. Treat this as an open set and match on the prefix before the colon when one is present. Bare (colon-less) values: url_parse_failed, scheme_must_be_https, url_must_not_contain_credentials, hostname_is_localhost, dns_lookup_returned_no_addresses. Address/message-suffixed values of the form <reason>: <detail>: host_resolves_to_private_ip: 10.0.0.5, ipv4_is_private_or_loopback: 127.0.0.1, ipv6_is_private_or_loopback: ::1, and dns_lookup_failed: <message>.
issuesarray of objectnoSchema-validation issues. Only set on validation_error responses. Each entry has a path array and a message.
json
{
  "error": "validation_error",
  "issues": [
    {
      "path": [
        "limit"
      ],
      "message": "Number must be less than or equal to 100"
    }
  ]
}
401Unauthorized

The PAT is missing, malformed, expired, or revoked.

See Errors for the shared error response shape.

403Forbidden

PAT is valid but the account is on the free plan.

See Errors for the shared error response shape.

429Too Many Requests

Per-account rate limit exceeded.

See Errors for the shared error response shape.

500Internal Server Error

Unexpected server error.

See Errors for the shared error response shape.

Need help? Email support@voicegram.io.