SellOrchard

API reference

Bookings

Appointments and classes booked through the store.
On this page

List bookings

get/bookings

Required scopes:read_bookings

Query parameters

NameTypeDescription
limitintegerPage size, 1–250 (default 50).

default 50 · min 1 · max 250

cursorstringnext_cursor from the previous page.
updated_sincestring<date-time>Only objects changed at or after this ISO-8601 time.
created_sincestring<date-time>Only objects created at or after this ISO-8601 time.
statusstringStatus.

One of:pendingconfirmedcancelledcompletedno_show

customer_idintegerOf this customer.
order_idintegerFrom this order.
starts_afterstring<date-time>Starting at or after (ISO-8601).
starts_beforestring<date-time>Starting before (ISO-8601).

Example request

curl
curl "https://api.sellorchard.com/v1/bookings?limit=50" \
  -H "Authorization: Bearer $SELLORCHARD_API_KEY"

Response200Bookings.

Show response schema
  • dataarray of Bookingrequired
    Show item attributes
    • objectstringrequired
    • idintegerrequired

      Id.

    • numberstringrequired

      Booking number.

    • statusstringrequired

      Status.

      One of:pendingconfirmedcancelledcompletedno_show

    • sourcestringrequired

      Where it was made.

      One of:webadminpos

    • service_namestringrequired

      Service.

    • variant_titlestring | nullrequired

      Option (duration).

    • product_idinteger | nullrequired

      Booking product.

    • variant_idinteger | nullrequired

      Variant.

    • order_idinteger | nullrequired

      Order.

    • customer_idinteger | nullrequired

      Customer.

    • customer_namestring | nullrequired

      Name.

    • customer_emailstring | nullrequired

      Email.

    • customer_phonestring | nullrequired

      Phone.

    • starts_atstring<date-time>required

      Start (UTC).

    • ends_atstring<date-time>required

      End (UTC).

    • timezonestringrequired

      Time zone it was booked in.

    • seatsintegerrequired

      Seats (classes).

    • resource_idinteger | nullrequired

      Resource (staff, room…).

    • location_idinteger | nullrequired

      Location.

    • notesstring | nullrequired

      Notes.

    • pricestring | nullrequired

      Price.

      pattern ^-?\d+\.\d{2}$

    • depositstring | nullrequired

      Deposit paid.

      pattern ^-?\d+\.\d{2}$

    • balance_duestring | nullrequired

      Due at the appointment.

      pattern ^-?\d+\.\d{2}$

    • currencystringrequired

      Currency.

    • cancel_reasonstring | nullrequired

      Why it was cancelled.

    • cancelled_atstring<date-time> | nullrequired

      Cancelled.

    • created_atstring<date-time>required

      Created.

    • updated_atstring<date-time>required

      Last changed.

  • has_morebooleanrequired

    More pages after this one.

  • next_cursorstring | nullrequired

    Pass as cursor for the next page; null on the last page.

200 response
{
  "data": [
    {
      "object": "booking",
      "id": 15,
      "number": "B-1015",
      "status": "confirmed",
      "source": "web",
      "service_name": "Haircut",
      "variant_title": "30 minutes",
      "product_id": 140,
      "variant_id": 402,
      "order_id": 5521,
      "customer_id": 880,
      "customer_name": "Ann Lee",
      "customer_email": "ann@example.com",
      "customer_phone": null,
      "starts_at": "2026-11-10T15:00:00Z",
      "ends_at": "2026-11-10T15:30:00Z",
      "timezone": "America/Chicago",
      "seats": 1,
      "resource_id": 3,
      "location_id": 1,
      "notes": null,
      "price": "35.00",
      "deposit": "0.00",
      "balance_due": "0.00",
      "currency": "USD",
      "cancel_reason": null,
      "cancelled_at": null,
      "created_at": "2026-11-02T15:00:00Z",
      "updated_at": "2026-11-03T09:30:00Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Error responses

  • 400invalid_requestMalformed request (e.g. a bad cursor).
  • 401authenticationMissing, invalid, expired or revoked API key.
  • 403permissionThe key lacks the scope, or the store's plan doesn't include the API.
  • 422invalid_requestInvalid parameters; errors lists each field.
  • 429rate_limitedToo many requests.
  • 500serverSomething went wrong on our side; safe to retry with the same Idempotency-Key.

Get a booking

get/bookings/{id}

Required scopes:read_bookings

Path parameters

NameTypeDescription
idrequiredintegerThe object id.

Example request

curl
curl "https://api.sellorchard.com/v1/bookings/120" \
  -H "Authorization: Bearer $SELLORCHARD_API_KEY"

Response200A booking.

Show response schema
  • dataBookingrequired
    Show child attributes
    • objectstringrequired
    • idintegerrequired

      Id.

    • numberstringrequired

      Booking number.

    • statusstringrequired

      Status.

      One of:pendingconfirmedcancelledcompletedno_show

    • sourcestringrequired

      Where it was made.

      One of:webadminpos

    • service_namestringrequired

      Service.

    • variant_titlestring | nullrequired

      Option (duration).

    • product_idinteger | nullrequired

      Booking product.

    • variant_idinteger | nullrequired

      Variant.

    • order_idinteger | nullrequired

      Order.

    • customer_idinteger | nullrequired

      Customer.

    • customer_namestring | nullrequired

      Name.

    • customer_emailstring | nullrequired

      Email.

    • customer_phonestring | nullrequired

      Phone.

    • starts_atstring<date-time>required

      Start (UTC).

    • ends_atstring<date-time>required

      End (UTC).

    • timezonestringrequired

      Time zone it was booked in.

    • seatsintegerrequired

      Seats (classes).

    • resource_idinteger | nullrequired

      Resource (staff, room…).

    • location_idinteger | nullrequired

      Location.

    • notesstring | nullrequired

      Notes.

    • pricestring | nullrequired

      Price.

      pattern ^-?\d+\.\d{2}$

    • depositstring | nullrequired

      Deposit paid.

      pattern ^-?\d+\.\d{2}$

    • balance_duestring | nullrequired

      Due at the appointment.

      pattern ^-?\d+\.\d{2}$

    • currencystringrequired

      Currency.

    • cancel_reasonstring | nullrequired

      Why it was cancelled.

    • cancelled_atstring<date-time> | nullrequired

      Cancelled.

    • created_atstring<date-time>required

      Created.

    • updated_atstring<date-time>required

      Last changed.

200 response
{
  "data": {
    "object": "booking",
    "id": 15,
    "number": "B-1015",
    "status": "confirmed",
    "source": "web",
    "service_name": "Haircut",
    "variant_title": "30 minutes",
    "product_id": 140,
    "variant_id": 402,
    "order_id": 5521,
    "customer_id": 880,
    "customer_name": "Ann Lee",
    "customer_email": "ann@example.com",
    "customer_phone": null,
    "starts_at": "2026-11-10T15:00:00Z",
    "ends_at": "2026-11-10T15:30:00Z",
    "timezone": "America/Chicago",
    "seats": 1,
    "resource_id": 3,
    "location_id": 1,
    "notes": null,
    "price": "35.00",
    "deposit": "0.00",
    "balance_due": "0.00",
    "currency": "USD",
    "cancel_reason": null,
    "cancelled_at": null,
    "created_at": "2026-11-02T15:00:00Z",
    "updated_at": "2026-11-03T09:30:00Z"
  }
}

Error responses

  • 401authenticationMissing, invalid, expired or revoked API key.
  • 403permissionThe key lacks the scope, or the store's plan doesn't include the API.
  • 404not_foundNo such object in this store.
  • 429rate_limitedToo many requests.
  • 500serverSomething went wrong on our side; safe to retry with the same Idempotency-Key.

Cancel a booking

post/bookings/{id}/cancel

Frees the slot and refunds as asked. Fires booking.cancelled.

Required scopes:write_bookings

Path parameters

NameTypeDescription
idrequiredintegerThe object id.

Headers

NameTypeDescription
Idempotency-KeystringAny unique string (e.g. a UUID, up to 255 characters). A retry with the same key and body within 24 hours gets the first response again (Idempotent-Replayed: true); the same key with a different body is a 409 conflict.

Request body

  • reasonstring | null

    Why.

  • refundstring | null

    full (to the original payment), credit (store credit) or none; default: the service's policy.

    One of:fullcreditnone

  • notifyboolean

    Email the customer (default true).

Example request

curl
curl -X POST "https://api.sellorchard.com/v1/bookings/120/cancel" \
  -H "Authorization: Bearer $SELLORCHARD_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "reason": "Stylist unavailable",
  "refund": "full"
}'

Response200The booking, with the amount refunded.

Show response schema
  • dataobjectrequired
    Show child attributes
    • refundedstring

      Refunded for it.

      pattern ^-?\d+\.\d{2}$

    • objectstringrequired
    • idintegerrequired

      Id.

    • numberstringrequired

      Booking number.

    • statusstringrequired

      Status.

      One of:pendingconfirmedcancelledcompletedno_show

    • sourcestringrequired

      Where it was made.

      One of:webadminpos

    • service_namestringrequired

      Service.

    • variant_titlestring | nullrequired

      Option (duration).

    • product_idinteger | nullrequired

      Booking product.

    • variant_idinteger | nullrequired

      Variant.

    • order_idinteger | nullrequired

      Order.

    • customer_idinteger | nullrequired

      Customer.

    • customer_namestring | nullrequired

      Name.

    • customer_emailstring | nullrequired

      Email.

    • customer_phonestring | nullrequired

      Phone.

    • starts_atstring<date-time>required

      Start (UTC).

    • ends_atstring<date-time>required

      End (UTC).

    • timezonestringrequired

      Time zone it was booked in.

    • seatsintegerrequired

      Seats (classes).

    • resource_idinteger | nullrequired

      Resource (staff, room…).

    • location_idinteger | nullrequired

      Location.

    • notesstring | nullrequired

      Notes.

    • pricestring | nullrequired

      Price.

      pattern ^-?\d+\.\d{2}$

    • depositstring | nullrequired

      Deposit paid.

      pattern ^-?\d+\.\d{2}$

    • balance_duestring | nullrequired

      Due at the appointment.

      pattern ^-?\d+\.\d{2}$

    • currencystringrequired

      Currency.

    • cancel_reasonstring | nullrequired

      Why it was cancelled.

    • cancelled_atstring<date-time> | nullrequired

      Cancelled.

    • created_atstring<date-time>required

      Created.

    • updated_atstring<date-time>required

      Last changed.

200 response
{
  "data": {
    "object": "booking",
    "id": 15,
    "number": "B-1015",
    "status": "cancelled",
    "source": "web",
    "service_name": "Haircut",
    "variant_title": "30 minutes",
    "product_id": 140,
    "variant_id": 402,
    "order_id": 5521,
    "customer_id": 880,
    "customer_name": "Ann Lee",
    "customer_email": "ann@example.com",
    "customer_phone": null,
    "starts_at": "2026-11-10T15:00:00Z",
    "ends_at": "2026-11-10T15:30:00Z",
    "timezone": "America/Chicago",
    "seats": 1,
    "resource_id": 3,
    "location_id": 1,
    "notes": null,
    "price": "35.00",
    "deposit": "0.00",
    "balance_due": "0.00",
    "currency": "USD",
    "cancel_reason": null,
    "cancelled_at": null,
    "created_at": "2026-11-02T15:00:00Z",
    "updated_at": "2026-11-03T09:30:00Z",
    "refunded": "35.00"
  }
}

Error responses

  • 401authenticationMissing, invalid, expired or revoked API key.
  • 403permissionThe key lacks the scope, or the store's plan doesn't include the API.
  • 404not_foundNo such object in this store.
  • 409conflictThe Idempotency-Key was used with a different request, or that request is still running.
  • 422invalid_requestInvalid parameters; errors lists each field.
  • 429rate_limitedToo many requests.
  • 500serverSomething went wrong on our side; safe to retry with the same Idempotency-Key.