Files
fetcherpay-python/fetcherpay/api/webhooks.py
2026-02-19 12:17:09 -05:00

81 lines
2.1 KiB
Python

"""
Webhooks API
"""
from typing import Optional, List, Dict, Any
class WebhooksAPI:
"""Webhooks API client"""
def __init__(self, client):
self.client = client
def create(
self,
url: str,
events: Optional[List[str]] = None,
metadata: Optional[Dict[str, Any]] = None,
idempotency_key: Optional[str] = None
) -> dict:
"""
Create a webhook endpoint
Args:
url: Endpoint URL
events: List of events to subscribe to
metadata: Optional metadata
idempotency_key: Idempotency key
"""
data = {'url': url}
if events:
data['events'] = events
if metadata:
data['metadata'] = metadata
return self.client._request(
'POST',
'/webhooks',
json=data,
idempotency_key=idempotency_key
)
def retrieve(self, webhook_id: str) -> dict:
"""Retrieve a webhook endpoint"""
return self.client._request('GET', f'/webhooks/{webhook_id}')
def list(
self,
limit: int = 25,
cursor: Optional[str] = None
) -> dict:
"""List webhook endpoints"""
params = {'limit': limit}
if cursor:
params['cursor'] = cursor
return self.client._request('GET', '/webhooks', params=params)
def update(
self,
webhook_id: str,
url: Optional[str] = None,
events: Optional[List[str]] = None,
metadata: Optional[Dict[str, Any]] = None
) -> dict:
"""Update a webhook endpoint"""
data = {}
if url:
data['url'] = url
if events:
data['events'] = events
if metadata:
data['metadata'] = metadata
return self.client._request('PUT', f'/webhooks/{webhook_id}', json=data)
def delete(self, webhook_id: str) -> None:
"""Delete a webhook endpoint"""
self.client._request('DELETE', f'/webhooks/{webhook_id}')