> ## Documentation Index
> Fetch the complete documentation index at: https://docs.turrisfi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List Webhooks

> List the webhooks registered by the authenticated upstream entity

Returns the webhooks registered by your upstream entity, so you can discover the `id` of a webhook and then fire a self-test against it (see [Send Test Event](/api-reference/v1/webhooks/test-webhook)). The signing secret is never returned; only its last four characters are exposed for reconciliation.

## Query Parameters

| Parameter  | Type   | Required | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| ---------- | ------ | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`type`** | string | No       | Filter to a single webhook type. Omit to return all of your webhooks. Allowed values: `AGENT_COMPLIANCE_STATUS_CHANGE`, `AML_OFAC_CHECK_STATUS_CHANGE`, `DOWNSTREAM_ENTITY_COMPLIANCE_STATUS_CHANGE`, `DOWNSTREAM_ENTITY_CREATED`, `DOWNSTREAM_ENTITY_DELETED`, `DOWNSTREAM_ENTITY_UPDATED`, `ENTITY_COMPLIANCE_DATA_SYNCHRONIZED`, `PRODUCER_AGREEMENT_EXECUTED`, `SURPLUS_LINES_FILING_STATUS_CHANGE`, `SURPLUS_LINES_FILING_ACTION_REQUIRED`. See [Available Webhook Events](/guides/webhooks). |

## Filtering Examples

```bash theme={null}
# All of your webhooks
GET /v1/webhooks

# Only surplus lines filing status webhooks
GET /v1/webhooks?type=SURPLUS_LINES_FILING_STATUS_CHANGE
```

## Response Shape

<Note>
  All successful responses are wrapped in the standard response envelope. See [Request/Response Conventions](/guides/request-response).
</Note>

```json theme={null}
{
  "statusCode": 200,
  "data": [
    {
      "id": "6650a1b2c3d4e5f6a7b8c9d0",
      "type": "SURPLUS_LINES_FILING_STATUS_CHANGE",
      "url": "https://example.com/webhooks/turris",
      "clientSecretLastFour": "a1b2",
      "createdAt": "2025-06-01T12:00:00.000Z"
    }
  ],
  "timestamp": "2025-06-01T12:05:00.000Z"
}
```

### Response Fields

| Field                  | Type   | Description                                                                                                                                   |
| ---------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`                   | string | Unique identifier of the webhook. Use this in the [Send Test Event](/api-reference/v1/webhooks/test-webhook) path.                            |
| `type`                 | string | Event type the webhook is subscribed to (for example `SURPLUS_LINES_FILING_STATUS_CHANGE`). See [Available Webhook Events](/guides/webhooks). |
| `url`                  | string | Destination URL that receives the signed delivery                                                                                             |
| `clientSecretLastFour` | string | Last four characters of the signing secret, for reconciliation only                                                                           |
| `createdAt`            | string | ISO 8601 timestamp when the webhook was registered                                                                                            |

## Error Scenarios

### Bad Request (400)

Returned when `type` is not one of the allowed webhook types.

```json theme={null}
{
  "statusCode": 400,
  "errorType": "validation_error",
  "errorMessage": ["Invalid value for type"],
  "requestId": "dev-abc123",
  "timestamp": "2025-06-01T12:00:00.000Z"
}
```

### Unauthorized (401)

Missing or invalid authentication token. See [Authentication](/authentication).


## OpenAPI

````yaml openapi/v1.json GET /v1/webhooks
openapi: 3.0.0
info:
  title: Turris Public API
  description: API for managing insurance compliance data
  version: 1.0.0
  contact: {}
servers:
  - url: https://public.api.live.turrisfi.com
    description: Production
  - url: https://public.api.sandbox.turrisfi.com
    description: Sandbox
security: []
tags: []
paths:
  /v1/webhooks:
    get:
      tags:
        - webhooks
      operationId: WebhooksController_listWebhooks_v1
      parameters:
        - name: type
          required: false
          in: query
          description: >-
            Filter to a single webhook type. Omit to return all of your
            webhooks.
          schema:
            enum:
              - AGENT_COMPLIANCE_STATUS_CHANGE
              - AGENT_LICENSE_EXPIRED
              - AGENT_LICENSE_EXPIRING
              - AGENT_REGULATORY_ACTION_ADDED
              - AGENT_REGULATORY_ACTION_UPDATED
              - AML_OFAC_CHECK_STATUS_CHANGE
              - DOWNSTREAM_ENTITY_COMPLIANCE_STATUS_CHANGE
              - DOWNSTREAM_ENTITY_CREATED
              - DOWNSTREAM_ENTITY_DELETED
              - DOWNSTREAM_ENTITY_LICENSE_EXPIRED
              - DOWNSTREAM_ENTITY_LICENSE_EXPIRING
              - DOWNSTREAM_ENTITY_REGULATORY_ACTION_ADDED
              - DOWNSTREAM_ENTITY_REGULATORY_ACTION_UPDATED
              - DOWNSTREAM_ENTITY_UPDATED
              - ENTITY_COMPLIANCE_DATA_SYNCHRONIZED
              - PRODUCER_AGREEMENT_EXECUTED
              - SURPLUS_LINES_FILING_STATUS_CHANGE
              - SURPLUS_LINES_FILING_ACTION_REQUIRED
            type: string
      responses:
        '200':
          description: List of webhooks registered by the authenticated upstream entity
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/WebhookListItemResponse'
                  requestId:
                    type: string
                    description: Unique request identifier
                    example: dev-2c5e7cf2-9acf-4c8c-ab2f-b81f39d775a8
                  timestamp:
                    type: string
                    description: Response timestamp
                    example: '2025-11-12T20:49:03.293Z'
                required:
                  - data
                  - requestId
                  - timestamp
        '401':
          description: Invalid or missing auth token
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseDto'
components:
  schemas:
    WebhookListItemResponse:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier of the webhook
          example: 6650a1b2c3d4e5f6a7b8c9d0
        type:
          type: string
          description: Event type this webhook is subscribed to
          enum:
            - AGENT_COMPLIANCE_STATUS_CHANGE
            - AGENT_LICENSE_EXPIRED
            - AGENT_LICENSE_EXPIRING
            - AGENT_REGULATORY_ACTION_ADDED
            - AGENT_REGULATORY_ACTION_UPDATED
            - AML_OFAC_CHECK_STATUS_CHANGE
            - DOWNSTREAM_ENTITY_COMPLIANCE_STATUS_CHANGE
            - DOWNSTREAM_ENTITY_CREATED
            - DOWNSTREAM_ENTITY_DELETED
            - DOWNSTREAM_ENTITY_LICENSE_EXPIRED
            - DOWNSTREAM_ENTITY_LICENSE_EXPIRING
            - DOWNSTREAM_ENTITY_REGULATORY_ACTION_ADDED
            - DOWNSTREAM_ENTITY_REGULATORY_ACTION_UPDATED
            - DOWNSTREAM_ENTITY_UPDATED
            - ENTITY_COMPLIANCE_DATA_SYNCHRONIZED
            - PRODUCER_AGREEMENT_EXECUTED
            - SURPLUS_LINES_FILING_STATUS_CHANGE
            - SURPLUS_LINES_FILING_ACTION_REQUIRED
          example: SURPLUS_LINES_FILING_STATUS_CHANGE
        url:
          type: string
          description: Destination URL that receives the signed webhook delivery
          example: https://example.com/webhooks/turris
        clientSecretLastFour:
          type: string
          description: Last four characters of the signing secret, for reconciliation only
          example: a1b2
        createdAt:
          type: string
          description: ISO 8601 timestamp when the webhook was registered
          example: '2025-06-01T12:00:00.000Z'
      required:
        - id
        - type
        - url
        - clientSecretLastFour
        - createdAt
    ErrorResponseDto:
      type: object
      properties:
        statusCode:
          type: number
          description: HTTP status code
        requestId:
          type: string
          description: Unique request identifier for debugging
        errorType:
          type: string
          description: >-
            Machine-readable error classification. Branch on this rather than on
            `errorMessage`, which is prose and may change. Authentication
            failures returned by our identity provider are forwarded verbatim,
            so a 401 can carry a code outside this list; treat an unrecognised
            value as a generic failure of its HTTP status.
          enum:
            - conflict
            - contact_not_authorized
            - document_exceeds_page_limit
            - downstream_entity_member_exists
            - duplicate_external_id_error
            - duplicate_member_email
            - duplicate_producer_code_error
            - forbidden
            - gateway_timeout
            - inactive_email
            - internal_server_error
            - invalid_email
            - invalid_email_for_invites
            - invalid_organization_category
            - invalid_organization_slug
            - invalid_phone_number
            - invalid_token
            - invite_limit_reached
            - jwt_invalid
            - m2m_client_not_found
            - not_found
            - organization_already_exists
            - organization_slug_already_used
            - payment_required
            - producer_agreement_required
            - product_feature_subscription_required
            - service_unavailable
            - session_authorization_error
            - some_custom_error_string
            - throttled
            - too_many_requests
            - unauthorized
            - unauthorized_client
            - unexpected_400_stytch_error
            - unexpected_403_stytch_error
            - unexpected_404_stytch_error
            - unexpected_error
            - unexpected_stytch_error
            - unprocessable_entity
            - validation_error
          example: validation_error
        errorMessage:
          description: Array of error messages
          type: array
          items:
            type: string
        timestamp:
          type: string
          description: ISO timestamp when the error occurred
        details:
          type: object
          description: Additional error context
      required:
        - statusCode
        - requestId
        - errorType
        - errorMessage
        - timestamp

````

## Related topics

- [Send Test Event](/api-reference/v1/webhooks/test-webhook.md)
- [Migrating from v1 to v2](/guides/migration-v1-to-v2.md)
- [The Agency API](/guides/agency-api.md)
