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

# Read one viewing

> One hour of the agenda by its id, in the same shape as in the agenda across listings, with the client, the reminders and the answer to „Cum a fost?”.



## OpenAPI

````yaml en/openapi.json GET /viewings/{slot}
openapi: 3.1.2
info:
  title: Housera API
  version: 1.0.0
  description: >-
    Publish and manage real estate listings on Housera from your CRM or your own
    application, under the same rules as the form on the Housera portal.
servers:
  - url: https://staging.housera.ro/api/v1
    description: 'Sandbox (staging): test data, same rules as production.'
  - url: https://housera.ro/api/v1
    description: 'Production: the real listings on housera.ro.'
security:
  - bearer: []
tags:
  - name: Your listings
  - name: Photos
  - name: Events
  - name: Vocabulary
  - name: Connect with Housera
  - name: Client requests
  - name: The company and its team
  - name: Marketing mandates
  - name: Viewings
  - name: Projects
  - name: Partnerships
  - name: API key
  - name: Statistics
paths:
  /viewings/{slot}:
    get:
      tags:
        - Viewings
      summary: Read one viewing
      description: >-
        One hour of the agenda by its id, in the same shape as in the agenda
        across listings, with the client, the reminders and the answer to „Cum a
        fost?”.
      operationId: v1.viewings.get
      parameters:
        - name: slot
          in: path
          required: true
          schema:
            type: integer
          description: The id of the time or window, from the agenda's `slots[].id`.
        - name: locale
          in: query
          required: false
          schema:
            type: string
            enum:
              - ro
              - en
            default: en
          example: en
          description: >-
            The response language, `ro` or `en`. It changes error messages
            (`title`, `detail`), labels and, when the listing has an approved
            translation in that language, its title and description. Codes are
            the same in every language. It takes precedence over
            `Accept-Language` and over the account's language.
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/ViewingSlotApiResource'
                    description: The result of the request.
                required:
                  - data
          description: The request succeeded.
        '401':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: The key is missing, revoked or expired (`unauthenticated`).
        '403':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: >-
            The key lacks the required permission (`missing_ability`) or access
            is denied (`forbidden`).
        '404':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: >-
            The listing does not exist or the key has no access to it
            (`not_found`).
        '429':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
          description: >-
            Too many requests. Try again after the number of seconds in
            `Retry-After`.
components:
  schemas:
    ViewingSlotApiResource:
      type: object
      properties:
        id:
          anyOf:
            - type: integer
            - []
          description: >-
            The event ID (ULID, increasing). Send it as `after` to continue
            where you left off.
        kind:
          anyOf:
            - type: string
              enum:
                - viewing
                - open_house
            - []
          description: Type.
        starts_at:
          anyOf:
            - type: string
            - []
          description: Start time.
        ends_at:
          anyOf:
            - type: string
            - []
          description: End time.
        status:
          anyOf:
            - type: string
              const: completed
            - []
          description: >-
            `available`, `pending`, `booked` or `completed` (a booked viewing
            whose hour has passed).
        request_expires_at:
          anyOf:
            - type:
                - string
                - 'null'
            - []
          description: >-
            When you have to answer a request by. After it, the request expires
            and the time is free again. Null when the time is not requested.
        visitor:
          anyOf:
            - anyOf:
                - type: object
                  properties:
                    name:
                      type:
                        - string
                        - 'null'
                      description: Name.
                    email:
                      type: 'null'
                      description: The client's email, if they have one.
                    phone:
                      type:
                        - string
                        - 'null'
                      description: Phone.
                    account:
                      type: boolean
                      description: >-
                        `true`: the client has a Housera account. `false`: you
                        added them by hand and they have no email.
                  required:
                    - name
                    - email
                    - phone
                    - account
                - type: 'null'
                - type: object
                  properties:
                    name:
                      type: string
                      description: Name.
                    email:
                      type: string
                      description: The client's email, if they have one.
                    phone:
                      type:
                        - string
                        - 'null'
                      description: Phone.
                    account:
                      type: boolean
                      description: >-
                        `true`: the client has a Housera account. `false`: you
                        added them by hand and they have no email.
                  required:
                    - name
                    - email
                    - phone
                    - account
                - type: object
                  properties:
                    name:
                      type: string
                      description: Name.
                    email:
                      type: string
                      description: The client's email, if they have one.
                    phone:
                      type:
                        - string
                        - 'null'
                      description: Phone.
                  required:
                    - name
                    - email
                    - phone
            - []
          description: >-
            The client: `name`, `email`, `phone` and `account`. Only for a key
            with the `leads:read` ability, otherwise null. The name and phone of
            a client added by hand are erased 90 days after the viewing.
        source:
          anyOf:
            - type: string
              enum:
                - schedule
                - manual
            - []
          description: >-
            `schedule`: the hour was generated by the weekly schedule. `manual`:
            it was put in by hand.
        duration_min:
          anyOf:
            - type: integer
            - []
          description: 'How long a viewing lasts, in minutes: 15, 30, 45, 60 or 90.'
        held:
          anyOf:
            - type: boolean
            - []
          description: >-
            The hour is kept for a short while for someone signing in to book
            it. While it is kept, nobody else can book it.
        bookable:
          anyOf:
            - type: string
            - []
          description: >-
            On a free hour: whether a client can book it now (the notice,
            whoever runs the viewings is not busy at another listing, the hour
            is not kept). Null on the other hours.
        booked_at:
          anyOf:
            - type:
                - string
                - 'null'
            - []
          description: When the hour was booked or asked for.
        proposed_starts_at:
          anyOf:
            - type:
                - string
                - 'null'
            - []
          description: >-
            The hour proposed to the client instead of the booked one, while it
            waits for their answer. Null otherwise.
        attendance_confirmed_at:
          anyOf:
            - type:
                - string
                - 'null'
            - []
          description: When the client answered „Da, vin” to the reminder.
        reminded_day_at:
          anyOf:
            - type:
                - string
                - 'null'
            - []
          description: When the client was sent the reminder on the day before.
        reminded_soon_at:
          anyOf:
            - type:
                - string
                - 'null'
            - []
          description: When the client was sent the reminder two hours before.
        outcome:
          anyOf:
            - type:
                - string
                - 'null'
              enum:
                - offer
                - again
                - not_interested
                - no_show
                - null
            - []
          description: >-
            The answer to „Cum a fost?”: `offer`, `again`, `not_interested` or
            `no_show`. Null until it is given.
        outcome_at:
          anyOf:
            - type:
                - string
                - 'null'
            - []
          description: When „Cum a fost?” was answered.
        agent:
          anyOf:
            - type:
                - object
                - 'null'
              properties:
                name:
                  type: string
                  description: >-
                    The name of the agent's account. The portal shows the name
                    in `display_name`.
                email:
                  type:
                    - string
                    - 'null'
                  description: >-
                    The agent's email; `null` when we have no real address for
                    them, for example a colleague who came from a CRM with no
                    email on their team record.
              required:
                - name
                - email
            - []
          description: >-
            Who meets the client: the consultant the booking went to on a
            project, otherwise whoever runs the listing's viewings. `name` and
            `email`.
        place:
          anyOf:
            - type:
                - string
                - 'null'
              enum:
                - office
                - show_flat
                - unit
                - null
            - []
          description: >-
            On a developer's project, where the client is met: `office`,
            `show_flat` or `unit`. Null elsewhere.
        place_rooms:
          anyOf:
            - type:
                - integer
                - 'null'
            - []
          description: >-
            On a developer's project: how many rooms the flat the client wants
            to see has.
        seat:
          anyOf:
            - type: integer
            - []
          description: >-
            On a developer's project, the hour's place: one for each consultant,
            with the same `starts_at`. 0 elsewhere.
      required:
        - id
        - kind
        - starts_at
        - ends_at
        - status
        - request_expires_at
        - visitor
        - source
        - duration_min
        - held
        - bookable
        - booked_at
        - proposed_starts_at
        - attendance_confirmed_at
        - reminded_day_at
        - reminded_soon_at
        - outcome
        - outcome_at
        - agent
        - place
        - place_rooms
        - seat
      additionalProperties: {}
      title: ViewingSlotApiResource
    Problem:
      type: object
      title: Problem
      properties:
        type:
          type: string
          format: uri
          description: The URL of the problem type (RFC 9457).
        title:
          type: string
          description: A short summary of the problem, in the request's language.
        status:
          type: integer
          description: The HTTP status code.
        code:
          type: string
          description: >-
            The stable code of the refusal, the one to handle the error by (the
            list is on the Errors page).
        detail:
          type: string
          description: The explanation, in the request's language.
        existing:
          type: object
          properties:
            code:
              type: string
              description: The existing listing's public code.
            external_ref:
              type:
                - string
                - 'null'
              description: >-
                Your ID for the existing listing, if you set it with `PUT
                /listings/ref/{ref}`. Otherwise `null`.
          required:
            - code
            - external_ref
          description: >-
            Only on `409 duplicate_listing`: the listing you already have for
            the same property.
      required:
        - type
        - title
        - status
        - code
        - detail
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      description: 'Authorization: Bearer <key>'

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.