List pipe, table, and organization-owned webhooks in one paginated connection, without returning header values.
Before You Begin
🔗 Use the GraphQL Playground to execute the queries in this guide.
➡️ New to GraphQL? Learn how to navigate the Playground with our Playground Basics Guide.
Prerequisites
- Authentication: Use a Service Account token (Personal Access Tokens are deprecated).
- Permissions: Your token must belong to an organization admin or super admin with
manage_webhookpermission. Other organization roles, including pipe and table admins, receivePERMISSION_DENIED. - Organization ID: Identify the Organization to list webhooks for.
Step 1: Find Your Organization ID
1. Via Pipefy UI
- Open the Organization in your browser.
- The URL will include the Organization ID:
https://app.pipefy.com/organizations/123456789. - Organization ID =
123456789(the number after/organizations/).
2. Via GraphQL Query
- Refer to our Get resource IDs page for alternative methods.
Step 2: Query Organization Webhooks
Query webhooksInventory through the target organization to retrieve its pipe, table, and organization-scoped webhooks. Results are ordered by webhook ID in ascending order.
Header values are never returned. Use hasHeaders to check whether a webhook has custom headers configured.
query ListOrganizationWebhooks(
$organizationId: ID!
$first: Int
$after: String
$repoIds: [ID!]
$withDeleted: Boolean
) {
organization(id: $organizationId) {
id
webhooksInventory(
first: $first
after: $after
repoIds: $repoIds
withDeleted: $withDeleted
) {
edges {
node {
id
name
url
email
actions
filters
identityPropagationEnabled
hasHeaders
scope
origin {
id
name
deletedAt
}
createdAt
updatedAt
deletedAt
}
}
totalCount
pageInfo {
hasNextPage
endCursor
}
}
}
}
Variables
{
"organizationId": "321",
"first": 2,
"after": null,
"repoIds": null,
"withDeleted": false
}
Set repoIds to pipe IDs, table IDs, or a combination of both. When repoIds is present, organization-scoped webhooks are excluded. IDs that belong to another organization are ignored.
withDeleted controls whether soft-deleted webhooks are included. It defaults to false, and an explicit null also behaves as false.
Sample Response
{
"data": {
"organization": {
"id": "321",
"webhooksInventory": {
"edges": [
{
"node": {
"id": "1001",
"name": "Card created",
"url": "https://example.com/hooks/cards",
"email": null,
"actions": ["card.create"],
"filters": null,
"identityPropagationEnabled": false,
"hasHeaders": true,
"scope": "PIPE",
"origin": { "id": "301", "name": "Sales Pipeline", "deletedAt": null },
"createdAt": "2026-01-15T12:00:00Z",
"updatedAt": "2026-01-15T12:00:00Z",
"deletedAt": null
}
},
{
"node": {
"id": "1002",
"name": "Record updated",
"url": "https://example.com/hooks/records",
"email": null,
"actions": ["card.field_update"],
"filters": null,
"identityPropagationEnabled": false,
"hasHeaders": false,
"scope": "TABLE",
"origin": { "id": "302", "name": "Customers", "deletedAt": null },
"createdAt": "2026-01-20T09:30:00Z",
"updatedAt": "2026-01-20T09:30:00Z",
"deletedAt": null
}
}
],
"totalCount": 3,
"pageInfo": {
"hasNextPage": true,
"endCursor": "Mg"
}
}
}
}
}
totalCount reports the number of webhooks that match the current filters, not only the number returned on this page.
Step 3: Fetch the Next Page
Pass the previous pageInfo.endCursor as after while keeping the other filters unchanged:
{
"organizationId": "321",
"first": 2,
"after": "Mg",
"repoIds": null,
"withDeleted": false
}
Continue until pageInfo.hasNextPage is false. Each page can contain at most 50 webhooks.
webhooksInventory and webhooks
webhooksInventory and webhooksThe two fields serve different purposes:
| Field | Scope | Headers |
|---|---|---|
organization { webhooksInventory } | Pipe, table, and organization-scoped webhooks | Returns hasHeaders, but never returns header values |
organization { webhooks } | Organization-scoped webhooks only | Legacy field that returns configured headers, including their values |
Use webhooksInventory for organization-wide inventory and auditing. Existing integrations that need the legacy organization-scoped response can continue to use webhooks.
Key Notes
- Admin only: Organization admins and super admins with
manage_webhookpermission can resolve this field. Other roles receivePERMISSION_DENIED. Theorganizationobject still resolves, butwebhooksInventoryisnull. - Repo filter:
repoIdsaccepts pipe and table IDs from the target organization. Passing an empty list (repoIds: []) returnsINVALID_INPUT. IDs from other organizations are ignored. - Deleted webhooks:
withDeleted: trueincludes soft-deleted webhooks. Webhooks owned by soft-deleted pipes or tables are returned regardless ofwithDeleted; this argument filters the webhook itself. - Sandbox exclusion: Webhooks from sandbox or draft-version pipes and tables are not returned.
- Owner:
originis a summary (id,name,deletedAt) of the owning pipe or table, including soft-deleted ones, and isnullfor organization-scoped webhooks. Usescopeto tell pipes from tables, and query the pipe or table directly for anything else. - Headers:
hasHeadersreports whether custom headers are configured without exposing their names or values. - Ordering: Results are always ordered by webhook ID in ascending order, which provides deterministic pagination.
- Pagination: Use
firstandafterto page forward. Pages hold at most 50 webhooks (a largerfirststill returns at most 50), andtotalCountcovers all results that match the filters. - There is no filter for active/inactive webhooks, orphaned repos, search, actions, sort, or scope.

