---
updatedAt: 2025-10-23T03:40:01.000Z
agentTools:
  projectIndex: https://developers.zenbooker.com/llms.txt
---

# Retrieve a list of services

Returns a paginated list of services. Items in `results` are full Service objects (same properties as `/services/{id}`).

# OpenAPI definition

```json
{
  "openapi": "3.1.0",
  "info": {
    "title": "zenbooker-api",
    "version": "1.0"
  },
  "servers": [
    {
      "url": "https://api.zenbooker.com/v1/"
    }
  ],
  "components": {
    "securitySchemes": {
      "sec0": {
        "type": "apiKey",
        "in": "header",
        "name": "Authorization",
        "x-bearer-format": "bearer"
      }
    },
    "schemas": {
      "ServiceOption": {
        "type": "object",
        "required": [
          "option_id",
          "name"
        ],
        "properties": {
          "option_id": {
            "type": "string",
            "description": "Unique identifier for the option"
          },
          "name": {
            "type": "string",
            "description": "Option name/label"
          },
          "price": {
            "type": "string",
            "description": "Price as decimal string"
          },
          "duration": {
            "type": "integer",
            "format": "int32",
            "description": "Duration in minutes"
          },
          "image": {
            "type": [
              "string",
              "null"
            ],
            "description": "URL of option image"
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Option description"
          },
          "allow_comment": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "If true, customer can add a comment for this option"
          },
          "comment_placeholder": {
            "type": [
              "string",
              "null"
            ],
            "description": "Placeholder text for the comment input"
          }
        }
      },
      "ServiceSection": {
        "type": "object",
        "required": [
          "section_id",
          "section_type",
          "title",
          "input_type"
        ],
        "properties": {
          "section_id": {
            "type": "string",
            "description": "Unique identifier for the section"
          },
          "section_type": {
            "type": "string",
            "description": "Type of section",
            "enum": [
              "price_modifier",
              "intake_question"
            ]
          },
          "title": {
            "type": "string",
            "description": "Section title"
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Section description"
          },
          "input_type": {
            "type": "string",
            "description": "Input type (e.g., \"radio_buttons\", \"checkboxes\", \"short_text_answer\", \"long_text_answer\", \"image_upload\")",
            "enum": [
              "radio_buttons",
              "checkboxes",
              "short_text_answer",
              "long_text_answer",
              "dropdown",
              "image_upload",
              "pictures"
            ]
          },
          "multi_select": {
            "type": "boolean",
            "description": "Whether multiple selections are allowed"
          },
          "required": {
            "type": "boolean",
            "description": "Whether this section must be answered"
          },
          "can_edit_quantity": {
            "type": "boolean",
            "description": "Whether quantity can be edited for each option"
          },
          "options": {
            "type": "array",
            "description": "Available options for this section",
            "items": {
              "$ref": "#/components/schemas/ServiceOption"
            }
          },
          "input_placeholder": {
            "type": [
              "string",
              "null"
            ],
            "description": "Placeholder text for text-based inputs"
          }
        }
      },
      "HighlightItem": {
        "type": "object",
        "required": [
          "title",
          "description"
        ],
        "properties": {
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "secondary_attributes": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "Highlight": {
        "type": "object",
        "required": [
          "element_type",
          "element_headline",
          "items"
        ],
        "properties": {
          "element_type": {
            "type": "string",
            "description": "Type of highlight element",
            "enum": [
              "how_it_works",
              "faq",
              "testimonials",
              "bulletpoints"
            ]
          },
          "element_headline": {
            "type": "string"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HighlightItem"
            }
          }
        }
      },
      "RecurringFrequency": {
        "type": "object",
        "required": [
          "frequency_id",
          "name",
          "offer_discount"
        ],
        "properties": {
          "frequency_id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "offer_discount": {
            "type": "boolean"
          },
          "rrule_string": {
            "type": [
              "string",
              "null"
            ]
          },
          "rrule_freq": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "DAILY",
              "WEEKLY",
              "MONTHLY",
              "YEARLY",
              null
            ]
          },
          "rrule_interval": {
            "type": "integer",
            "format": "int32"
          },
          "discount_prerequisite_job_count": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "plan_description": {
            "type": [
              "string",
              "null"
            ]
          },
          "discount_value_type": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "percentage",
              "fixed_amount",
              null
            ]
          },
          "discount_value": {
            "type": [
              "string",
              "null"
            ],
            "description": "Decimal string; for percentage use 0.10 for 10%"
          }
        }
      },
      "Service": {
        "type": "object",
        "required": [
          "service_id",
          "is_visible",
          "name",
          "base_duration"
        ],
        "properties": {
          "service_id": {
            "type": "string",
            "description": "Unique identifier for the service"
          },
          "is_visible": {
            "type": "boolean",
            "description": "Whether the service is visible to customers on the hosted booking page."
          },
          "name": {
            "type": "string",
            "description": "Display name of the service"
          },
          "category_id": {
            "type": "string",
            "description": "ID of the service category this belongs to"
          },
          "payment_method_required": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Whether payment method is required for booking"
          },
          "custom_payment_methods": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "List of custom payment method IDs"
          },
          "credit_card_capture": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "timeslot_template_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "pricing_method": {
            "type": "string"
          },
          "base_duration": {
            "type": "integer",
            "format": "int32",
            "description": "Base duration in minutes"
          },
          "base_price": {
            "type": "string",
            "description": "Base price as decimal string"
          },
          "min_price": {
            "type": "string",
            "description": "Minimum price as decimal string"
          },
          "taxable": {
            "type": "boolean",
            "description": "Whether service is subject to tax"
          },
          "price_prefix": {
            "type": [
              "string",
              "null"
            ],
            "description": "Text to display before price"
          },
          "image": {
            "type": [
              "string",
              "null"
            ],
            "description": "URL of service image"
          },
          "payment_terms": {
            "type": [
              "string",
              "null"
            ]
          },
          "sections": {
            "type": "array",
            "description": "Contains the service configuration sections (pricing modifiers, intake questions)",
            "items": {
              "$ref": "#/components/schemas/ServiceSection"
            }
          },
          "confirmation_page": {
            "type": [
              "string",
              "null"
            ]
          },
          "confirmation_custom_headline": {
            "type": [
              "string",
              "null"
            ]
          },
          "confirmation_custom_body": {
            "type": [
              "string",
              "null"
            ]
          },
          "confirmation_redirect_url": {
            "type": [
              "string",
              "null"
            ]
          },
          "offers_recurring_options": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Whether recurring booking is available"
          },
          "recurring_headline": {
            "type": [
              "string",
              "null"
            ],
            "description": "Headline for recurring options section"
          },
          "recurring_body": {
            "type": [
              "string",
              "null"
            ],
            "description": "Body text for recurring options"
          },
          "show_recurring_frequencies_first": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "min_providers_required": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "description": "Minimum number of providers needed"
          },
          "skill_tags_required": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "List of required skill tag IDs"
          },
          "territory_price_adjustments": {
            "type": "array",
            "items": {},
            "description": "Reserved for per-territory pricing adjustments"
          },
          "booking_flow": {
            "type": [
              "string",
              "null"
            ],
            "description": "One of: bookable, booking_request, quote_request"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "highlights": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Highlight"
            },
            "description": "Marketing elements like \"how it works\" and FAQ sections"
          },
          "recurring_frequencies": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RecurringFrequency"
            }
          },
          "appointment_label": {
            "type": [
              "string",
              "null"
            ]
          },
          "preselected_recurring_frequency": {
            "type": [
              "string",
              "null"
            ]
          },
          "created": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        }
      },
      "ServiceListResponse": {
        "type": "object",
        "required": [
          "cursor",
          "results",
          "count",
          "has_more"
        ],
        "properties": {
          "cursor": {
            "type": "integer",
            "format": "int32",
            "description": "Current cursor (offset) for this page"
          },
          "next_cursor": {
            "type": [
              "string",
              "null"
            ],
            "description": "Cursor token for the next page, or null if none"
          },
          "has_more": {
            "type": "boolean",
            "description": "Whether more results are available"
          },
          "count": {
            "type": "integer",
            "format": "int32",
            "description": "Number of results in this page"
          },
          "acct": {
            "type": [
              "string",
              "null"
            ],
            "description": "Account/business name for context"
          },
          "results": {
            "type": "array",
            "description": "Array of full Service objects (same shape as /services/{id})",
            "items": {
              "$ref": "#/components/schemas/Service"
            }
          }
        }
      }
    }
  },
  "security": [
    {
      "sec0": []
    }
  ],
  "paths": {
    "/services": {
      "get": {
        "summary": "Retrieve a list of services",
        "description": "Returns a paginated list of services. Items in `results` are full Service objects (same properties as `/services/{id}`).",
        "operationId": "retrieve-a-list-of-services",
        "parameters": [
          {
            "name": "sort_order",
            "in": "query",
            "description": "If empty, defaults to `ascending`",
            "schema": {
              "type": "string",
              "enum": [
                "descending",
                "ascending"
              ]
            }
          },
          {
            "name": "category_id",
            "in": "query",
            "description": "Filter by the ID of a service category",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "is_visible",
            "in": "query",
            "description": "Filter by visibility on the hosted booking page",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "created_before",
            "in": "query",
            "description": "Returns services created before this date",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "created_after",
            "in": "query",
            "description": "Returns services created after this date",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Pagination start",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "The maximum number of results to return. If not specified, defaults to 20. Max is 100.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 20
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful list response with full Service objects",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceListResponse"
                },
                "examples": {
                  "Result": {
                    "summary": "Full services in results",
                    "value": {
                      "cursor": 0,
                      "results": [
                        {
                          "service_id": "1760300167598x745029266608947700",
                          "is_visible": true,
                          "name": "Home Theater TV Mounting & Setup",
                          "category_id": "1641411352272x618473804546965500",
                          "payment_method_required": true,
                          "custom_payment_methods": [
                            "1722358355329x895804061698524300",
                            "1722358355338x959678706593890300"
                          ],
                          "timeslot_template_id": null,
                          "credit_card_capture": true,
                          "pricing_method": "Price Varies",
                          "base_duration": 120,
                          "base_price": "149.00",
                          "min_price": "149.00",
                          "price_prefix": "Total",
                          "image": null,
                          "payment_terms": "Custom terms here",
                          "confirmation_page": "default",
                          "confirmation_custom_headline": null,
                          "confirmation_custom_body": null,
                          "confirmation_redirect_url": null,
                          "taxable": true,
                          "offers_recurring_options": true,
                          "recurring_headline": "How Often?",
                          "recurring_body": "Pick a recurring plan and save",
                          "appointment_label": "Home Theater Setup",
                          "show_recurring_frequencies_first": false,
                          "preselected_recurring_frequency": null,
                          "min_providers_required": 1,
                          "skill_tags_required": [
                            "1644300596121x270327024038445060"
                          ],
                          "territory_price_adjustments": [],
                          "booking_flow": "bookable",
                          "description": "Professional TV mounting and setup.",
                          "highlights": [
                            {
                              "element_type": "how_it_works",
                              "element_headline": "How it works",
                              "items": [
                                {
                                  "title": "Book",
                                  "description": "Book online",
                                  "secondary_attributes": null
                                },
                                {
                                  "title": "Relax",
                                  "description": "We handle it",
                                  "secondary_attributes": null
                                },
                                {
                                  "title": "Enjoy",
                                  "description": "All set",
                                  "secondary_attributes": null
                                }
                              ]
                            }
                          ],
                          "sections": [
                            {
                              "section_id": "1760300168129x855444251360474400",
                              "section_type": "price_modifier",
                              "title": "TV size (select one)",
                              "description": "Choose size",
                              "input_type": "radio_buttons",
                              "multi_select": false,
                              "required": true,
                              "can_edit_quantity": false,
                              "options": [
                                {
                                  "option_id": "1760300168599x299965067990447740",
                                  "name": "Up to 49-inch TV",
                                  "price": "0.00",
                                  "duration": 0,
                                  "image": null,
                                  "description": "Included"
                                },
                                {
                                  "option_id": "1760300168685x597574803337188900",
                                  "name": "50–65-inch TV",
                                  "price": "30.00",
                                  "duration": 15,
                                  "image": null,
                                  "description": "Extra handling"
                                }
                              ],
                              "input_placeholder": null
                            }
                          ],
                          "recurring_frequencies": [
                            {
                              "frequency_id": "1760300454129x970163696862494700",
                              "name": "Weekly",
                              "offer_discount": true,
                              "rrule_string": "RRULE:FREQ=WEEKLY;INTERVAL=1",
                              "rrule_freq": "WEEKLY",
                              "rrule_interval": 1,
                              "discount_prerequisite_job_count": 1,
                              "plan_description": null,
                              "discount_value_type": "percentage",
                              "discount_value": "0.1"
                            }
                          ],
                          "created": "2024-08-12T15:30:00.000Z"
                        }
                      ],
                      "acct": "Lightning Cleaners",
                      "count": 1,
                      "has_more": false,
                      "next_cursor": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request"
          }
        },
        "deprecated": false
      }
    }
  }
}
```