Creavi Booking REST API
Connect an approved tool to your WordPress booking system. The API can read services and availability, create bookings, and retrieve booking details.
API v1 · Creavi Booking 1.6.1 or later
Updated 22 September 2026
Quick start
- Open Creavi Booking → Booking API in WordPress.
- Under Add API connection, enter a name, select the permissions the tool needs, and choose an expiry period.
- Select Create connection. The Booking API is enabled automatically.
- Copy the generated username and Application Password immediately, or download the ready-to-use Postman collection. The password is shown only once.
- Store the credentials in the tool’s server-side secret storage and connect over HTTPS.
Test the connection. Curl prompts for the Application Password, so it does not need to appear in the command:
curl --user 'generated_username' \
'https://your-site.example/wp-json/creavi-booking/v1/connection'
A successful response confirms the connection’s permissions, limits, and expiry. A 401 or 403 response usually means the credentials are wrong, expired or revoked, the required permission is missing, or the API is disabled.
Recommended: create a separate connection for each tool and grant only the permissions it needs. Do not use an administrator password or expose an Application Password in browser code.
Endpoints
Base URL: https://your-site.example/wp-json/creavi-booking/v1
| Method | Path | Purpose |
|---|---|---|
| GET | /connection |
Test authentication and view effective permissions and limits. |
| GET | /services |
List published services. Supports page and per_page. |
| GET | /services/{id} |
Read duration, timezone, required customer fields, custom fields, and consent requirements. |
| GET | /services/{id}/availability?date=2026-10-01 |
Find available starts for one date in the service timezone. |
| POST | /bookings |
Create a confirmed booking. |
| GET | /bookings |
List bookings visible to this connection. Supports date, service, order, and pagination filters. |
| GET | /bookings/{id} |
Read full details for one visible booking. |
GET /bookings defaults to today. Filter with from, to, service_id, page, per_page, and order. Dates are inclusive, ranges can cover up to 93 days, and per_page cannot exceed 100.
GET /bookings?from=2026-09-22&to=2026-09-30&order=asc
By default, a connection can retrieve bookings it created. Enable Read all bookings only when the tool must access website bookings or bookings created by other integrations.
Create a booking
- Read
/services/{id}to discover required fields and consent. - Request availability and use the returned
starts_atvalue exactly as provided. - Send the booking with a new, unique
Idempotency-Key. - Save the returned booking ID.
Minimal request:
curl --user 'generated_username' \
--request POST \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: 3b0c43b5-42dc-42a6-8ed4-61a984b203ef' \
--data '{
"service_id": 123,
"starts_at": "2026-10-01T10:00:00+02:00",
"customer": {
"name": "Alex Smith",
"email": "alex@example.com",
"timezone": "Europe/Paris"
}
}' \
'https://your-site.example/wp-json/creavi-booking/v1/bookings'
If the service requires a phone number, custom fields, or consent, include them exactly as described by /services/{id}. Custom-field values are strings. Date fields use YYYY-MM-DD.
A new booking returns 201. A safe replay returns 200, the same booking ID, and replayed: true. Successful responses also include appointment time, duration, customer-facing meeting details, and delivery results for email and connected calendars.
Retries and errors
After a timeout, retry the same JSON body with the same Idempotency-Key. Never generate a different key for the same booking attempt. Retry protection is retained for seven days.
| Status | What to do |
|---|---|
| 400 | Correct invalid or missing input, required fields, or consent. |
| 401 / 403 | Check credentials, connection expiry, API status, HTTPS, and permissions. |
| 404 | Check the service or booking ID and the connection’s access. |
| 409 | The slot, consent, or retry key conflicts. Inspect the response code before retrying. |
| 429 | Rate limit reached. Wait for the Retry-After period. |
| 503 | Temporary storage, locking, or availability failure. Retry the same request and key after Retry-After. |
Errors use WordPress JSON: { "code", "message", "data": { "status" } }. Limits are 120 API requests per minute per connection, including up to 20 booking attempts.
A booking can be confirmed even if email, video, or calendar delivery later needs attention. Check delivery_status and delivery; do not create a second booking to retry a delivery.
Calendar connections in 1.6.1
If Google Calendar or Outlook temporarily cannot be checked, the API and website continue using the service’s local availability and local booking-conflict checks. Customers are not shown connection errors.
Busy-time blocking and new calendar-event creation are paused for the affected connection until it works again. An administrator sees a private Calendar connection needs attention notice when editing the affected service. Reconnect the calendar if required; a successful provider check clears a temporary warning automatically.
Security and access
- Use HTTPS and keep credentials in server-side secret storage.
- Create one connection per tool so it can be rotated or revoked independently.
- Grant Read all bookings sparingly because it exposes customer data across the site.
- Rotate a connection if its password is lost or exposed. Rotation immediately invalidates the old password.
- Revoking or expiring a connection blocks access without deleting its booking history.
The plugin package includes the OpenAPI 3.1 contract at docs/openapi.json. The Booking API screen can also generate a Postman collection containing the connection URL, username, and one-time Application Password.
Need help with an integration? Contact Creavi.