Overview
The BookingShake API uses standard HTTP status codes to indicate the success or failure of requests. Error responses include a JSON object with a descriptivemessage field to help you understand what went wrong.
HTTP Status Codes
| Status Code | Meaning | Description |
|---|---|---|
200 | Success | Request completed successfully |
400 | Bad Request | Invalid request parameters or authentication error |
403 | Forbidden | Access denied to the requested resource |
429 | Too Many Requests | Rate limit exceeded |
500 | Internal Server Error | Something went wrong on our end |
Error Response Format
All errors follow a consistent JSON structure:Common Errors
Authentication Errors
missing token
missing token
HTTP Status: Example:
400 Bad RequestCause: The Authorization header is missing from the request.Solution: Include the Bearer token in the Authorization header:invalid token
invalid token
HTTP Status:
400 Bad RequestCause: The API key provided is incorrect, expired, or revoked.Solution:- Verify you copied the complete API key without extra spaces
- Ensure you’re using the correct API key from Settings > Integrations
- Generate a new API key if needed
- Log in to BookingShake dashboard
- Go to Settings > Integrations
- Copy the API key again
- Try the request with the fresh key
Request Body Errors
body is empty
body is empty
HTTP Status:
400 Bad RequestCause: The request body is empty or not included in a POST request.Solution: Include a valid JSON body with your POST request:invalid body
invalid body
HTTP Status:
400 Bad RequestCause: The request body is not valid JSON or cannot be parsed.Solution:- Ensure your JSON is properly formatted
- Check for missing commas, quotes, or brackets
- Validate your JSON using a JSON validator
Missing Required Fields
missing bookings
missing bookings
HTTP Status:
400 Bad RequestCause: The bookings array is missing from the request body.Solution: Include at least one booking in the bookings array:missing contact
missing contact
HTTP Status:
400 Bad RequestCause: The contact object is missing from the request body.Solution: Include contact information with required fields:missing pax
missing pax
HTTP Status:
400 Bad RequestCause: The pax (number of attendees) field is missing from a booking.Solution: Include the pax field in each booking:Format Validation Errors
date format must be DD-MM-YYYY
date format must be DD-MM-YYYY
HTTP Status:
400 Bad RequestCause: The date is not in the correct DD-MM-YYYY format.Solution: Use the DD-MM-YYYY format:Examples:- ✅ Correct:
"15-03-2025","01-12-2024","31-01-2025" - ❌ Incorrect:
"2025-03-15","03/15/2025","15.03.2025"
startTime format must be HH:mm
startTime format must be HH:mm
HTTP Status:
400 Bad RequestCause: The time is not in the correct HH:mm format (24-hour).Solution: Use the HH:mm format with 24-hour time:Examples:- ✅ Correct:
"14:00","09:30","23:45" - ❌ Incorrect:
"2:00 PM","14:00:00","14h00"
endTime format must be HH:mm
endTime format must be HH:mm
HTTP Status:
400 Bad RequestCause: The end time is not in the correct HH:mm format.Solution: Same as startTime - use HH:mm format (24-hour).Authorization Errors
Forbidden - client access denied
Forbidden - client access denied
HTTP Status:
403 ForbiddenCause: You’re trying to access or use a contact_id that doesn’t belong to your venue or venue group.Solution:- Ensure the
contact_idbelongs to your venue - Use the correct venue API key
- Create a new contact instead of referencing an existing one
Rate Limiting Errors
Rate limit exceeded
Rate limit exceeded
HTTP Status: Response Body:Solution:
429 Too Many RequestsCause: You’ve exceeded the rate limit for the endpoint (e.g., 10 requests/minute for /events/create or 60 requests/minute for GET endpoints).Response Headers:- Wait for the duration specified in the
Retry-Afterheader (in seconds) - Implement exponential backoff for retries
- Monitor
X-RateLimit-Remainingheader to avoid hitting limits - Cache GET endpoint responses (sources, spaces, status, fields)
- Batch multiple bookings in a single
/events/createrequest
Resource Validation Errors
invalid space
invalid space
HTTP Status:
400 Bad RequestCause: The space_id provided does not exist or is not valid for your venue.Solution:- Retrieve available spaces first:
- Use a valid
space_idfrom the response:
- Or omit the
space_idto use the default space.
invalid source
invalid source
HTTP Status:
400 Bad RequestCause: The source_slug or source_id provided does not exist.Solution:- Retrieve available sources:
- Use a valid source identifier from the response.
Product Validation Errors
When including products to create draft quotations, these validation errors may occur:missing products title
missing products title
HTTP Status:
400 Bad RequestCause: A product in the products array is missing the required title field.Solution: Ensure every product has a title:missing products quantity
missing products quantity
HTTP Status:
400 Bad RequestCause: A product is missing the quantity field.Solution: Include a positive integer quantity for each product:missing products price_without_tax
missing products price_without_tax
HTTP Status:
400 Bad RequestCause: A product is missing the price_without_tax field.Solution: Include the price in cents/centimes (not euros/dollars):missing products vat
missing products vat
HTTP Status:
400 Bad RequestCause: A product is missing the vat (VAT rate) field.Solution: Include the VAT rate in basis points (not percentage):Invalid VAT rate
Invalid VAT rate
HTTP Status: Common mistakes:
400 Bad RequestCause: The VAT value is outside the valid range (0-10000 basis points).Solution: Ensure VAT is between 0 and 10000:- Using
20instead of2000for 20% VAT ❌ - Using negative values ❌
- Using values over 10000 ❌
Server Errors
Internal server error
Internal server error
HTTP Status:
500 Internal Server ErrorCause: An unexpected error occurred on the server.What to do:- Wait a moment and retry your request
- If the error persists, contact support at [email protected]
- Include the following information:
- Timestamp of the request
- Request method and endpoint
- Request body (sanitize any sensitive data)
- Any correlation ID if provided in the response
