> ## Documentation Index
> Fetch the complete documentation index at: https://docs.keebai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# GET /v1/scheduling/services

> List the tenant's available services. Supports filtering by branch, full-text search, and filtering by status.

Returns the services configured for the tenant resolved from the PAT. Search uses the service text index (`name`, `description`) in Spanish. Services include duration, time restrictions, and the professionals or resources allowed to deliver them.

## Endpoint

```
GET https://api.keebai.com/v1/scheduling/services
```

## Required scope

`scheduling:services:read`

## Query params

| Param      | Type     | Default | Description                                      |
| ---------- | -------- | ------- | ------------------------------------------------ |
| `branchId` | `string` | —       | Filter services available at a specific branch.  |
| `search`   | `string` | —       | Full-text search over name and description.      |
| `status`   | `string` | —       | Filter by service status (`active`, `inactive`). |
| `skip`     | `number` | `0`     | Pagination offset.                               |
| `limit`    | `number` | `50`    | Page size (max 200).                             |

## Example request

<CodeGroup>
  ```bash curl theme={null}
  curl -G https://api.keebai.com/v1/scheduling/services \
    -H "Authorization: Bearer kbai_pk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
    --data-urlencode "branchId=65a1f2b3c4d5e6f7a8b9c0d1" \
    --data-urlencode "search=consulta general"
  ```

  ```js JavaScript theme={null}
  const url = new URL("https://api.keebai.com/v1/scheduling/services");
  url.searchParams.set("branchId", branchId);
  const { items } = await (
    await fetch(url, {
      headers: { Authorization: `Bearer ${process.env.KEEBAI_API_TOKEN}` },
    })
  ).json();
  ```

  ```python Python theme={null}
  import os, requests

  resp = requests.get(
      "https://api.keebai.com/v1/scheduling/services",
      headers={"Authorization": f"Bearer {os.environ['KEEBAI_API_TOKEN']}"},
      params={"branchId": branch_id, "search": "consulta general"},
      timeout=10,
  )
  resp.raise_for_status()
  services = resp.json()
  ```
</CodeGroup>

## Response

### 200 OK

List of services. Each item includes at least:

| Field                          | Type       | Description                                                                              |
| ------------------------------ | ---------- | ---------------------------------------------------------------------------------------- |
| `_id`                          | `string`   | Service id. Used as `service_id` in availability and when creating appointments.         |
| `name`                         | `string`   | Service display name.                                                                    |
| `description`                  | `string`   | Free-form description.                                                                   |
| `duration_minutes`             | `number`   | Default duration in minutes. Defines slot size.                                          |
| `bufferBefore` / `bufferAfter` | `number`   | Buffer minutes around the slot.                                                          |
| `time_rules`                   | `object`   | `{ earliest_start, latest_end }` — restricts the window during which booking is allowed. |
| `allowedProfessionals`         | `string[]` | Ids of professionals allowed to deliver the service.                                     |
| `price` / `currency`           | —          | Reference price.                                                                         |
| `status`                       | `string`   | `active` or `inactive`.                                                                  |

### 401 Unauthorized · 403 Forbidden

Same semantics as the rest of the public API.


## OpenAPI

````yaml GET /v1/scheduling/services
openapi: 3.0.0
info:
  title: Keebai Public API
  description: Superficie pública REST autenticada con Personal Access Tokens (PAT).
  version: 1.0.0
  contact: {}
servers:
  - url: https://api.keebai.com
    description: Production
security: []
tags: []
paths:
  /v1/scheduling/services:
    get:
      tags:
        - scheduling-services
      summary: Listar servicios disponibles del tenant
      operationId: PublicServicesController_list
      parameters:
        - name: branchId
          required: false
          in: query
          description: Filtrar por sucursal
          schema:
            type: string
        - name: search
          required: false
          in: query
          schema:
            type: string
        - name: status
          required: false
          in: query
          description: Estado del servicio (active/inactive)
          schema:
            type: string
        - name: skip
          required: false
          in: query
          schema:
            minimum: 0
            default: 0
            type: number
        - name: limit
          required: false
          in: query
          schema:
            minimum: 1
            maximum: 200
            default: 50
            type: number
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PublicServiceResponseDto'
      security:
        - PAT: []
components:
  schemas:
    PublicServiceResponseDto:
      type: object
      properties:
        id:
          type: string
          description: ObjectId del servicio
        name:
          type: string
        description:
          type: string
        duration_minutes:
          type: number
          description: Duración en minutos
        slot_interval_minutes:
          type: number
          description: Granularidad de los slots, en minutos
        price:
          type: object
          description: '{ amount, currency }'
        branches:
          description: Sucursales donde se presta
          type: array
          items:
            type: string
        category:
          type: string
        color:
          type: string
        status:
          type: string
          description: active | inactive
      required:
        - id
        - name
        - duration_minutes
        - status
  securitySchemes:
    PAT:
      scheme: bearer
      bearerFormat: kbai_pk_<hex>
      type: http
      description: >-
        Personal Access Token con prefijo `kbai_pk_`. Generar desde el portal
        con permiso `developer.manage_tokens`.

````