openapi: 3.0.3 info: title: Snov.io Authentication Webhooks API description: Snov.io is a sales automation and lead generation platform. The REST API enables programmatic access to email finding, domain search, email verification, drip campaign management, email warm-up, prospect management, CRM pipeline, and webhook subscriptions. Authentication uses OAuth 2.0 client credentials to obtain short-lived Bearer tokens. All API operations consume credits from the account balance. version: '2.0' contact: name: Snov.io Support url: https://snov.io/knowledgebase/ termsOfService: https://snov.io/terms-of-service/ license: name: Proprietary url: https://snov.io/terms-of-service/ servers: - url: https://api.snov.io description: Snov.io API server tags: - name: Webhooks description: Real-time event webhook subscriptions paths: /v1/webhooks: get: tags: - Webhooks summary: List webhooks description: Returns all webhook subscriptions for the account. operationId: listWebhooks security: - bearerAuth: [] responses: '200': description: List of webhooks content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Webhook' '401': $ref: '#/components/responses/Unauthorized' post: tags: - Webhooks summary: Add webhook description: Create a new webhook subscription for real-time event notifications. operationId: addWebhook security: - bearerAuth: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/WebhookCreate' responses: '201': description: Webhook created content: application/json: schema: $ref: '#/components/schemas/Webhook' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' /v1/webhooks/{id}: put: tags: - Webhooks summary: Update webhook description: Update an existing webhook subscription (e.g. change status or URL). operationId: updateWebhook security: - bearerAuth: [] parameters: - $ref: '#/components/parameters/ResourceId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/WebhookCreate' responses: '200': description: Webhook updated content: application/json: schema: $ref: '#/components/schemas/Webhook' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' delete: tags: - Webhooks summary: Delete webhook description: Remove a webhook subscription. operationId: deleteWebhook security: - bearerAuth: [] parameters: - $ref: '#/components/parameters/ResourceId' responses: '204': description: Webhook deleted '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' components: responses: Unauthorized: description: Unauthorized — missing or invalid Bearer token content: application/json: schema: $ref: '#/components/schemas/Error' BadRequest: description: Bad request — missing or invalid parameters content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: Resource not found content: application/json: schema: $ref: '#/components/schemas/Error' schemas: Webhook: type: object properties: id: type: integer url: type: string format: uri event: type: string status: type: string enum: - active - inactive created_at: type: string format: date-time WebhookCreate: type: object required: - url - event properties: url: type: string format: uri description: URL to receive webhook POST requests event: type: string description: Event type to subscribe to status: type: string enum: - active - inactive default: active Error: type: object properties: error: type: string description: Error code message: type: string description: Human-readable error message parameters: ResourceId: name: id in: path required: true schema: type: integer description: Resource ID securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT description: Obtain a Bearer token via POST /v1/oauth/access_token using client credentials. Tokens expire after 3600 seconds.