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

# List customer custom fields

> Returns the custom fields the restaurant defined for its customers, with their type and allowed options. Use the field `id` as the key of `custom_fields` when reading or writing a customer. Requires `CUSTOMERS_READ`.



## OpenAPI

````yaml https://app.eat-now.io/api/partner/v1/openapi.json get /api/partner/v1/customer-fields
openapi: 3.0.3
info:
  title: EatNow Partner API
  version: v1
  description: >-
    Version 1 of the EatNow partner API.


    This API is designed for trusted partner integrations that need
    restaurant-scoped access to availability, reservation management, and
    operational reference data.


    Authentication

    - Use `Authorization: Bearer <token>` with a partner API token created from
    the EatNow dashboard.

    - Access is controlled by credential scopes and each request is resolved to
    a single restaurant.


    Base URL

    - The server URL in this document is the canonical base URL for the current
    environment.


    Errors

    - Endpoint errors use `error.code`, `error.message`, and `error.request_id`.
    Errors raised before the endpoint, including rate limiting, may use another
    format.

    - Validation, authentication, authorization, conflicts, and not-found cases
    all use the same top-level error shape.


    Rate limits

    - The partner route rule allows 600 requests per minute per client IP. Back
    off on 429. When present, x-ratelimit-reset is an epoch timestamp in
    milliseconds.


    Public endpoints

    - `GET /api/partner/v1` and `GET /api/partner/v1/openapi.json` are public.

    - All business endpoints require Bearer authentication.
servers:
  - url: https://app.eat-now.io
security: []
tags:
  - name: Meta
    description: Platform metadata and schema endpoints
  - name: Authentication
    description: Credential validation and auth context endpoints
  - name: Availability
    description: Bookable slot search and exact slot validation
  - name: Catalog
    description: Reference data for restaurant tables, rooms, prescribers, and discounts
  - name: Reservations
    description: Reservation lookup, search, update, and cancellation
  - name: Customers
    description: >-
      Customer (CRM) records, independent of reservations: list, sync, create,
      update
  - name: Webhooks
    description: Webhook endpoints a key subscribes to V1 events (reservations, customers)
  - name: Missed Calls
    description: Report missed calls and trigger WhatsApp follow-up templates
externalDocs:
  description: Integration guides, authentication, errors, and webhook reference
  url: https://docs.eat-now.io/api-reference/introduction
paths:
  /api/partner/v1/customer-fields:
    get:
      tags:
        - Customers
      summary: List customer custom fields
      description: >-
        Returns the custom fields the restaurant defined for its customers, with
        their type and allowed options. Use the field `id` as the key of
        `custom_fields` when reading or writing a customer. Requires
        `CUSTOMERS_READ`.
      operationId: listPartnerCustomerFields
      responses:
        '200':
          description: Customer custom fields, in dashboard order
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerApiCustomerFieldListResponse'
        '400':
          description: Request validation failed (see `error.details.issues`).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerApiError'
        '401':
          description: Authentication failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerApiError'
        '403':
          description: 'Scope is insufficient. Required: `CUSTOMERS_READ`.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerApiError'
        '429':
          description: >-
            Rate limit exceeded. Configured limit: 600 requests per minute per
            client IP for the partner route rule. This middleware response may
            not use the PartnerApiError envelope or include request_id. Back off
            before retrying.
        '500':
          description: >-
            Unexpected server error. Preserve error.request_id for support.
            Before retrying a write, check whether it already succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerApiError'
      security:
        - PartnerBearerToken: []
components:
  schemas:
    PartnerApiCustomerFieldListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/PartnerApiCustomerField'
      required:
        - data
    PartnerApiError:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              $ref: '#/components/schemas/PartnerApiErrorCode'
            message:
              type: string
            request_id:
              type: string
            details:
              type: object
              additionalProperties:
                nullable: true
          required:
            - code
            - message
            - request_id
      required:
        - error
    PartnerApiCustomerField:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        name_i18n:
          type: object
          properties:
            FR:
              type: string
            EN:
              type: string
            ES:
              type: string
            IT:
              type: string
            DE:
              type: string
            PT:
              type: string
        type:
          type: string
          enum:
            - TEXT
            - NUMBER
            - DATE
            - BOOLEAN
            - SELECT
            - MULTI_SELECT
        required:
          type: boolean
          description: Required in the EatNow dashboard form. Not enforced on API writes.
        is_active:
          type: boolean
          description: >-
            Inactive fields are hidden from the dashboard. Their values stay on
            the customers and can still be written.
        min:
          type: number
          nullable: true
          description: Lowest value a NUMBER field accepts, if bounded.
        max:
          type: number
          nullable: true
          description: Highest value a NUMBER field accepts, if bounded.
        max_items:
          type: integer
          nullable: true
          description: Most values a MULTI_SELECT field accepts, if bounded.
        options:
          type: array
          nullable: true
          items:
            type: object
            properties:
              value:
                type: string
              label:
                type: string
            required:
              - value
              - label
          description: Allowed values of a SELECT or MULTI_SELECT field.
      required:
        - id
        - name
        - name_i18n
        - type
        - required
        - is_active
        - min
        - max
        - max_items
        - options
    PartnerApiErrorCode:
      type: string
      enum:
        - AUTHENTICATION_REQUIRED
        - INVALID_AUTHENTICATION
        - INSUFFICIENT_SCOPE
        - RESTAURANT_SUSPENDED
        - VALIDATION_ERROR
        - RESOURCE_NOT_FOUND
        - RESOURCE_CONFLICT
        - RATE_LIMITED
        - INTERNAL_ERROR
  securitySchemes:
    PartnerBearerToken:
      type: http
      scheme: bearer
      bearerFormat: API Token
      description: >-
        Restaurant-scoped partner API token passed as `Authorization: Bearer
        <token>`.
      x-default: your_token_here

````