Webhooks enable your application to be instantly informed about events occurring in your booking system. Rather than regularly polling our API for new data, anny automatically pushes relevant information directly to your application in real-time, making your integrations faster and more efficient.
What are Webhooks?
Webhooks are HTTP-based callbacks automatically sent by anny to your application when specific predefined events occur. Consider webhooks as "reverse API calls"– instead of your app constantly requesting updates from us, we proactively notify you as soon as something important happens.
Setting up a webhook
To set up a webhook:
In your anny Admin Area, click your user avatar and open Account Settings, then select the tab API.
Click on + Create Webhook.
Enter the following details:
Name: Choose a meaningful descriptive name (e.g. "CRM Integration").
URL: Enter the endpoint URL on your server to which anny should send event notifications.
Events: Select the event(s) that should trigger notifications to your endpoint.
Example Configuration
{
"name": "My CRM Integration",
"url": "https://api.myapp.com/webhooks/bookings",
"events": ["bookings.created", "bookings.updated"]
}
Available Events
anny supports webhooks across four different event categories:
Booking Events
Event | Description |
bookings.created | New booking created |
bookings.updated | Booking details modified |
bookings.started | Booking has started |
bookings.ended | Booking has ended |
bookings.checked-in | Customer has checked in |
bookings.checked-out | Customer has checked out |
bookings.deleted | Booking was deleted or cancelled |
Order Events
Event | Description |
orders.created | New order created |
orders.updated | Order details updated |
orders.deleted | Order cancelled or deleted |
Invoice Events
Event | Description |
invoices.created | Invoice created |
invoices.finalised | Invoice finalised |
invoices.updated | Invoice updated |
invoices.deleted | Invoice deleted or voided |
Customer Events
Event | Description |
customers.created | New customer registered |
customers.updated | Customer profile updated |
customers.deleted | Customer account deleted |
Event Filtering (Context Restrictions)
Optional – available only for booking events
Context restrictions allow you to limit the webhooks you receive to specific resources, categories, or services:
First select booking events.
Activate With restrictions within the event group.
Select your preferred type of filter:
Resources (e.g. specific rooms, equipment)
Resource groups
Resource categories
Services
Service groups
Common Examples:
Webhook notifications limited to spa services only ("Service group: Spa Services").
Notifications limited to certain meeting rooms only.
Notifications limited to online bookings ("Service group: Online Booking").
Webhook Payload Structure and Data
Each webhook contains structured information related to the event:
{
"event": "bookings.created",
"event_id": "550e8400-e29b-41d4-a716-446655440000",
"webhook_id": "01H8EXAMPLE123",
"triggered_at": "2024-01-15T14:30:00Z",
"data": {
"id": "1764",
"code": "!TIXWaEKmLAW8JN8bjRf",
"type": "bookings",
"number": "BB533155102",
"status": "accepted",
"total": 0,
"currency": "EUR",
"service": {
"id": "1",
"name": "Tages-Buchung",
"type": "services",
"price": 0,
"currency": "EUR"
},
"customer": {
"id": "2fa9ab69-abd5-45ec-9927-c4894fbf60a2",
"uuid": "2fa9ab69-abd5-45ec-9927-c4894fbf60a2",
"email": "00ufvv@ptct.net",
"full_name": "John Keats",
"given_name": "John",
"family_name": "Keats"
},
"resource": {
"id": "18",
"name": "Schreibtisch 4",
"type": "resources",
"timezone": "Europe/Berlin"
},
"start_date": "2025-06-13T07:00:00+00:00",
"end_date": "2025-06-13T16:00:00+00:00",
"created_at": "2025-06-07T12:54:38+00:00",
"description": "John Keats"
}
}
Key Fields
Field | Description |
event | The type of event that occurred |
event_id | Unique identifier for this webhook delivery |
webhook_id | Your webhook subscription ID |
triggered_at | Timestamp of when the event occurred |
data | The complete data object of the entity that triggered the webhook |
Security
Webhook Signatures
Optionally, you can activate webhook signatures to verify incoming webhook requests as authentic ones from anny. When enabled, the signature will be transmitted in the HTTP header "Signature".
Troubleshooting
Webhook Call History
Monitor all webhook deliveries comfortably in real time through the webhook management interface. The following statuses can occur during webhook deliveries:
Status | Meaning (HTTP Codes) | Explanation |
✅ | Success (200-299) | The webhook was successfully delivered. |
❌ | Failed (400+) | Delivery failed – check the response details of your server. |
⏳ | Pending | Webhook is queued and will be delivered shortly. |
🔄 | Retry | Manual retry of a previously failed webhook delivery. |
Viewing Request and Response Details
Click on a specific webhook delivery in the Call History to see:
The complete sent request (Payload)
Your server’s response message
HTTP status code from your server
The total number of delivery attempts made
Handling Failed Webhooks (Retry functionality)
Automatic retries
Failed webhook deliveries are automatically retried up to 3 times, with an increasing delay interval between attempts (exponential backoff).
Manual retries
In addition, you can manually retry failed webhook deliveries once:
Go to Webhooks → Call History.
Find the failed webhook delivery.
Click on the Retry button. (This is only possible once per webhook delivery attempt.)
Monitor the new delivery attempt in real time.
Managing Webhook Subscriptions
Enabling/Disabling Webhooks
You can activate or deactivate webhook subscriptions at any time, without losing their configuration.
Automatic Deactivation after Repeated Failures
To avoid unnecessary load and protect your server, anny automatically disables webhook subscriptions after 5 consecutive failed delivery attempts.
The number of consecutive failures is stored in the subscription's failure_count
attribute.
Common Integration Patterns
CRM Customer Synchronization
{
"name": "CRM Customer Sync",
"url": "https://api.mycrm.com/webhooks/customers",
"events": ["customers.created", "customers.updated"]
}
Booking Notifications (e.g., SMS Alerts)
{
"name": "SMS Booking Alerts",
"url": "https://api.smsservice.com/webhooks/bookings",
"events": ["bookings.created", "bookings.updated", "bookings.checked-in"],
"restrictions": [
{
"type": "services",
"id": "high-value-services-group"
}
]
}
Analytics Integration
{
"name": "Analytics Tracking",
"url": "https://analytics.myapp.com/webhooks/events",
"events": ["bookings.created", "bookings.ended", "invoices.finalised"]
}
Troubleshooting Webhooks
Webhook Not Receiving Any Events
Confirm that your webhook subscription is active.
Ensure the provided webhook URL is publicly accessible.
Verify that your server returns an HTTP response status code in the 200 range upon successful acceptance of webhook payloads.
Double-check whether context restrictions are set too narrowly. Adjust or remove restrictions as needed.
High Failure Count
Verify that your webhook endpoint URL is correct.
Review your server logs for error messages or troubleshooting clues.
Duplicate Events
Use the webhook's
event_id
to detect duplicate webhook deliveries and ensure each event is processed only once (idempotency).Check if multiple duplicate webhook subscriptions exist.
Implement technical safeguards (e.g., unique constraints in your database) to prevent duplicate processing of webhook events.
Getting Support with Webhooks
If you need assistance setting up or managing your webhooks:
First, check the webhook Call History for details on failed webhook calls.
Review your own server logs for errors regarding the webhook endpoints.
Contact our support team with the following information:
Webhook subscription ID
Exact error messages or problem description
Date and time since the issue started occurring