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

# GET /Customers

> Retrieve a paginated list of customer records.

Retrieve a paginated list of customer records. Use filters to narrow results by ID or last-modified date range.

<ParamField header="X-API-KEY" type="string" required>Your API key</ParamField>

<ParamField query="CustomerId" type="string">Filter to a specific customer by ID</ParamField>
<ParamField query="DateUpdatedStart" type="string">Filter by last modified date (start). Format: `yyyy-MM-ddTHH:mm:ss.fffZ`</ParamField>
<ParamField query="DateUpdatedEnd" type="string">Filter by last modified date (end). Format: `yyyy-MM-ddTHH:mm:ss.fffZ`</ParamField>
<ParamField query="Sort" type="string">Sort order: `asc` or `desc`</ParamField>
<ParamField query="Limit" type="integer">Number of records to return</ParamField>
<ParamField query="StartIndex" type="integer">Zero-based offset for pagination</ParamField>

<CodeGroup>
  ```shell curl theme={null}
  curl --location '[BASE_URL]/Customers?Limit=20&StartIndex=0' \
  --header 'X-API-KEY: your_api_key_here'
  ```
</CodeGroup>

Response is a paginated result with `from`, `to`, `length`, and `items` (array of CustomerSearchResult).

**CustomerSearchResult fields**

| Field              | Type    | Description                                                |
| ------------------ | ------- | ---------------------------------------------------------- |
| `id`               | string  | NowBookIt customer ID                                      |
| `firstName`        | string  | First name                                                 |
| `lastName`         | string  | Last name                                                  |
| `fullName`         | string  | Full name                                                  |
| `email`            | string  | Email address                                              |
| `phone`            | string  | Phone in international format                              |
| `phoneNational`    | string  | Phone in national format                                   |
| `phone2`           | string  | Secondary phone                                            |
| `birthdayDate`     | integer | Day of birth (1–31)                                        |
| `birthdayMonth`    | integer | Month of birth (1–12)                                      |
| `birthdayYear`     | integer | Year of birth                                              |
| `company`          | string  | Company name                                               |
| `address`          | object  | `line1`, `line2`, `city`, `state`, `postalCode`, `country` |
| `notes`            | string  | Internal notes                                             |
| `noShowCount`      | integer | Number of no-shows                                         |
| `tags`             | array   | Tags: `[{ id, identifier, name }]`                         |
| `subscribed`       | boolean | Subscribed to marketing emails                             |
| `lastModifiedDate` | string  | UTC datetime of last update                                |

**Example 200 Response**

```json theme={null}
{
  "from": 0,
  "to": 1,
  "length": 1,
  "items": [
    {
      "id": "cust-abc123",
      "firstName": "Jane",
      "lastName": "Smith",
      "fullName": "Jane Smith",
      "email": "jane.smith@example.com",
      "phone": "+61412345678",
      "phoneNational": "0412345678",
      "birthdayDate": 15,
      "birthdayMonth": 6,
      "birthdayYear": 1985,
      "address": {
        "line1": "123 Main St",
        "city": "Sydney",
        "state": "NSW",
        "postalCode": "2000",
        "country": "Australia"
      },
      "notes": "Prefers window seating",
      "noShowCount": 0,
      "tags": [{ "id": "tag-1", "identifier": "vip", "name": "VIP" }],
      "subscribed": true,
      "lastModifiedDate": "2024-03-15T10:30:00Z"
    }
  ]
}
```

| Status | Description                         |
| ------ | ----------------------------------- |
| `200`  | Customers returned                  |
| `400`  | API key not associated with a venue |
| `400`  | `No Venue Subscribed to your App.`  |
| `401`  | X-API-KEY missing or invalid        |
| `429`  | Rate limit exceeded                 |
| `500`  | `An error occurred.`                |


## OpenAPI

````yaml GET /Customers
openapi: 3.0.4
info:
  title: NowBookIt IPOS Partner API
  description: >-
    REST API for integrating your POS or external system with NowBookIt's
    reservation, sales, and gift card platform.
  version: v1
  contact:
    email: platform.integrations@nowbookit.com
servers:
  - url: https://ipos.dev.nowbookit.com
    description: Development
  - url: https://ipos.nowbookit.com
    description: Production
security:
  - ApiKeyAuth: []
paths:
  /Customers:
    get:
      tags:
        - Customers
      summary: List Customers
      operationId: listCustomers
      parameters:
        - name: CustomerId
          in: query
          description: Narrow the Filter search by specifying NBI Customer Id.
          schema:
            type: string
        - name: DateUpdatedStart
          in: query
          description: >-
            The Customer Last Modified Date to Start Search from (UTC). Format:
            'yyyy-MM-ddTHH:mm:ss.fffZ'
          schema:
            type: string
            format: date-time
        - name: DateUpdatedEnd
          in: query
          description: >-
            The Customer Last Modified Date to End Search from (UTC). Format:
            'yyyy-MM-ddTHH:mm:ss.fffZ'
          schema:
            type: string
            format: date-time
        - name: Sort
          in: query
          description: >-
            Sort result in Ascending or Descending order by FirstName and
            LastName.
          schema:
            $ref: '#/components/schemas/SortOrder'
        - name: Limit
          in: query
          description: Max number of records to return, default is 100, max is 100.
          schema:
            maximum: 100
            minimum: 1
            type: integer
            format: int32
        - name: StartIndex
          in: query
          description: >-
            Number of matching records to skip before returning the matches,
            default is 0.
          schema:
            type: integer
            format: int32
        - name: X-API-KEY
          in: header
          description: API Key authentication header
          required: true
          schema:
            type: string
        - name: Accept-Encoding
          in: header
          description: Pass 'gzip' to receive compressed response.
          schema:
            type: string
            default: gzip
      responses:
        '200':
          description: Get Customers
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerSearchResultPaginatedResult'
      security:
        - ApiKeyAuth: []
components:
  schemas:
    SortOrder:
      enum:
        - Asc
        - Desc
      type: string
    CustomerSearchResultPaginatedResult:
      type: object
      properties:
        from:
          type: integer
          format: int64
        to:
          type: integer
          format: int64
        length:
          type: integer
          format: int64
        items:
          type: array
          items:
            $ref: '#/components/schemas/CustomerSearchResult'
          nullable: true
      additionalProperties: false
    CustomerSearchResult:
      type: object
      properties:
        id:
          type: string
          nullable: true
        firstName:
          type: string
          nullable: true
        lastName:
          type: string
          nullable: true
        fullName:
          type: string
          nullable: true
        email:
          type: string
          nullable: true
        phone:
          type: string
          nullable: true
        phoneNational:
          type: string
          nullable: true
        phone2:
          type: string
          nullable: true
        birthdayDate:
          type: integer
          format: int32
          nullable: true
        birthdayMonth:
          type: integer
          format: int32
          nullable: true
        birthdayYear:
          type: integer
          format: int32
          nullable: true
        company:
          type: string
          nullable: true
        address:
          $ref: '#/components/schemas/Address'
        notes:
          type: string
          nullable: true
        noShowCount:
          type: integer
          format: int32
          nullable: true
        tags:
          type: array
          items:
            $ref: '#/components/schemas/CustomerTag'
          nullable: true
        subscribed:
          type: boolean
        lastModifiedDate:
          type: string
          nullable: true
      additionalProperties: false
      description: The Customer Details.
    Address:
      type: object
      properties:
        line1:
          type: string
          nullable: true
        line2:
          type: string
          nullable: true
        city:
          type: string
          nullable: true
        state:
          type: string
          nullable: true
        postalCode:
          type: string
          nullable: true
        country:
          type: string
          nullable: true
      additionalProperties: false
    CustomerTag:
      type: object
      properties:
        id:
          type: string
          nullable: true
        identifier:
          type: string
          nullable: true
        name:
          type: string
          nullable: true
      additionalProperties: false
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-KEY

````