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

  1. Open Creavi Booking → Booking API in WordPress.
  2. Under Add API connection, enter a name, select the permissions the tool needs, and choose an expiry period.
  3. Select Create connection. The Booking API is enabled automatically.
  4. Copy the generated username and Application Password immediately, or download the ready-to-use Postman collection. The password is shown only once.
  5. 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

  1. Read /services/{id} to discover required fields and consent.
  2. Request availability and use the returned starts_at value exactly as provided.
  3. Send the booking with a new, unique Idempotency-Key.
  4. 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.