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

# Seit einem Zeitstempel geänderte Tabellen auflisten

> Returns metadata for all tables whose last successful sync occurred after `since`. Only tables with `status = 'synced'` and a non-null `last_sync_at` are returned. Each entry includes an `endpoint_url` pointing to the corresponding category endpoint (e.g. `/property/properties`) or `/raw/{table_name}` for tables without a category mapping.

A table listed here must be fetched in full again -- there is no row-level delta. `since` with a UTC offset (e.g. `%2B02:00` in a query string) is converted to UTC. The `ETag` depends on `since` and `category`. `endpoint_url` depends on the customer's API version (`/v1/...` for v1-only customers).

**Category filter:** Pass `category` to only return tables belonging to that category. This only matches tables synced through the `/v1`-layer pipeline -- tables that are only available via `/raw/{table_name}` never have a category and are excluded when the filter is set.

**ETag / conditional GET:** The response includes an `ETag` header based on the latest sync timestamp.  Send the value back as `If-None-Match` on subsequent requests — when the sync state has not changed the server returns `304 Not Modified` without a body and without querying the change data.

**Key type:** Keys of type `transformed` only see tables of the categories/tables allowed by their access permissions; tables without a category (e.g. RAW-only tables) are never listed for them, and a `category` outside their permissions returns HTTP 403. Keys of type `raw` see all tables.

**Use case:** Poll this endpoint periodically to discover which tables have new data before fetching only the changed ones — avoids fetching unchanged tables on every sync.



## OpenAPI

````yaml https://api.trassets.ai/openapi.json GET /changes
openapi: 3.1.0
info:
  title: Trassets Data API
  description: >

    The **Trassets Data API** exposes customer real-estate and market data as a
    REST API —

    objects, units, contracts and bookings, delivered as machine-readable JSON.
    See Versioning Policy below for the current URL-versioning status.


    ## Quickstart


    ```bash

    export TRASSETS_API_KEY="sk_live_…"

    curl -G "https://api.trassets.ai/property/properties" \
      -H "X-API-Key: $TRASSETS_API_KEY" \
      -d "limit=1"
    ```


    ## Authentication


    Send your API key on every request as the `X-API-Key` header.

    The key determines the customer scope and access tiers.

    Trassets stores only an HMAC-SHA-256 hash — the plaintext key is never shown
    again after creation.


    ## Endpoint Types


    ### Category Endpoints — `/{category}/{api_table}`


    Normalized master data and business queries. Use these for day-to-day
    integrations.


    - **Pagination:** Offset-based (`limit` / `offset` query parameters); `/v1/`
    uses cursor pagination (`limit` / `cursor`)

    - **Data character:** Normalized, business-ready data

    - **Use case:** Business queries, dashboards, incremental data fetches


    ### Raw Endpoints — `/raw/{table_name}`


    Full table access for bulk sync and export. Only API keys of type `raw` may
    use these endpoints;

    keys of type `transformed` get HTTP 403 on `/raw/{table_name}` and an empty
    list on `/raw/tables`.


    - **Pagination:** Cursor-based (`cursor` query parameter from `next_cursor`
    in response)

    - **Data character:** Raw source data, unfiltered

    - **Use case:** Bulk sync, full exports, data warehousing


    ## Pagination


    - **`/v1/` category endpoints**: response body `{"data", "count",
    "next_cursor", "total"}`; pass `next_cursor` as `cursor` for the next page,
    `null` = last page. `offset` is not supported (400).

    - **Legacy category endpoints** (unversioned): `X-Total-Count`,
    `X-Has-More`, `X-Next-Offset` and `X-Next-Cursor` response headers.

    - **Raw endpoints**: `next_cursor` in response body. Stable under concurrent
    writes.


    ## Error format


    Errors follow [RFC 7807](https://datatracker.ietf.org/doc/html/rfc7807)
    (`application/problem+json`):

    `type`, `title`, `status`, `detail`, `instance`.


    | Status | Meaning |

    |--------|---------|

    | 400 | Missing required filter |

    | 401 | Invalid API key |

    | 403 | Missing access tier |

    | 404 | Unknown endpoint |

    | 429 | Rate limit (500 req/h per API key; see `Retry-After` header) |

    | 500 | Internal error |


    ## Versioning Policy


    URL versioning (`/v1/`) is live as a **preview** and rolling out per table:
    it may still receive breaking changes

    (the response envelope and pagination were changed in preview). A table
    appears under `/v1/{category}/{api_table}`

    once it has passed content review; until then it is only reachable under the
    unversioned path.

    The unversioned (legacy) path stays available during the rollout but may
    still receive breaking changes.

    Raw endpoints (`/raw/tables`, `/raw/{table_name}`) are generic per customer
    and are available

    under both `/raw/` and `/v1/raw/` — no per-table review gate. Access
    requires an API key of type `raw`.


    ## Field Glossary


    Common fields across endpoints. See the [full Field
    Glossary](https://docs.trassets.ai/data-model/field-glossary)

    for all domain-specific fields.


    | Field | Description |

    |---|---|

    | `entrance` | Street name and house number, e.g. Musterstrasse 12 |

    | `address` | Comma-separated postal code and city, e.g. 10115, Berlin |

    | `name` | Full name as single field. No separate first/last name available.
    |

    | `floor_area_id` | References floor_area_id in the property_structure table
    |


    ## Request an API key


    API keys are issued via the [Trassets
    Console](https://portal.api.trassets.ai).
  version: 1.0.0
servers:
  - url: https://api.trassets.ai
    description: Production
security: []
paths:
  /changes:
    get:
      tags:
        - Delta Sync
      summary: List tables changed since a given timestamp
      description: >-
        Returns metadata for all tables whose last successful sync occurred
        after `since`. Only tables with `status = 'synced'` and a non-null
        `last_sync_at` are returned. Each entry includes an `endpoint_url`
        pointing to the corresponding category endpoint (e.g.
        `/property/properties`) or `/raw/{table_name}` for tables without a
        category mapping.


        A table listed here must be fetched in full again -- there is no
        row-level delta. `since` with a UTC offset (e.g. `%2B02:00` in a query
        string) is converted to UTC. The `ETag` depends on `since` and
        `category`. `endpoint_url` depends on the customer's API version
        (`/v1/...` for v1-only customers).


        **Category filter:** Pass `category` to only return tables belonging to
        that category. This only matches tables synced through the `/v1`-layer
        pipeline -- tables that are only available via `/raw/{table_name}` never
        have a category and are excluded when the filter is set.


        **ETag / conditional GET:** The response includes an `ETag` header based
        on the latest sync timestamp.  Send the value back as `If-None-Match` on
        subsequent requests — when the sync state has not changed the server
        returns `304 Not Modified` without a body and without querying the
        change data.


        **Key type:** Keys of type `transformed` only see tables of the
        categories/tables allowed by their access permissions; tables without a
        category (e.g. RAW-only tables) are never listed for them, and a
        `category` outside their permissions returns HTTP 403. Keys of type
        `raw` see all tables.


        **Use case:** Poll this endpoint periodically to discover which tables
        have new data before fetching only the changed ones — avoids fetching
        unchanged tables on every sync.
      operationId: get_changes_changes_get
      parameters:
        - name: since
          in: query
          required: true
          schema:
            type: string
            description: >-
              ISO-8601 timestamp (UTC; an offset is converted to UTC, `+` must
              be URL-encoded as `%2B`). Only tables synced **after** this point
              are returned. Required. Must not be older than 120 days. Example:
              `2026-07-01T00:00:00Z`
            title: Since
          description: >-
            ISO-8601 timestamp (UTC; an offset is converted to UTC, `+` must be
            URL-encoded as `%2B`). Only tables synced **after** this point are
            returned. Required. Must not be older than 120 days. Example:
            `2026-07-01T00:00:00Z`
        - name: category
          in: query
          required: false
          schema:
            anyOf:
              - enum:
                  - accounting
                  - contracts
                  - depreciation
                  - operations
                  - property
                  - stakeholder
                type: string
              - type: 'null'
            description: >-
              Optional category filter. When provided, only tables belonging to
              this category are returned. Unknown values result in HTTP 400
              (with a list of valid categories for `raw` keys only).
            title: Category
          description: >-
            Optional category filter. When provided, only tables belonging to
            this category are returned. Unknown values result in HTTP 400 (with
            a list of valid categories for `raw` keys only).
      responses:
        '200':
          description: List of changed tables (may be empty if nothing has changed)
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ChangedTable'
                title: Response Get Changes Changes Get
              examples:
                with_changes:
                  summary: Two tables changed since the given timestamp
                  value:
                    - table_name: properties
                      last_sync_at: '2026-07-07T06:00:00'
                      category: property
                      api_table_name: properties
                      endpoint_url: /property/properties
                    - table_name: ixhaus__ixexpobj
                      last_sync_at: '2026-07-07T06:05:00'
                      endpoint_url: /raw/ixhaus__ixexpobj
                no_changes:
                  summary: Nothing changed since the given timestamp
                  value: []
        '304':
          description: Not Modified — sync state unchanged since the ETag was issued
        '400':
          description: Bad Request
          content:
            application/problem+json:
              example:
                type: about:blank
                title: Bad Request
                status: 400
                detail: since parameter must be a valid ISO 8601 datetime
                instance: /changes
        '401':
          description: Unauthorized
          content:
            application/problem+json:
              example:
                type: about:blank
                title: Unauthorized
                status: 401
                detail: API key required
                instance: /changes
        '403':
          description: Forbidden
          content:
            application/problem+json:
              example:
                type: about:blank
                title: Forbidden
                status: 403
                detail: Invalid or disabled API key
                instance: /changes
        '404':
          description: Not Found
          content:
            application/problem+json:
              example:
                type: about:blank
                title: Not Found
                status: 404
                detail: Table or schema not found
                instance: /changes
        '422':
          description: Unprocessable Entity
          content:
            application/problem+json:
              example:
                type: about:blank
                title: Unprocessable Entity
                status: 422
                detail: 'query -> since: value is not a valid datetime'
                instance: /changes
        '429':
          description: Too Many Requests
          content:
            application/problem+json:
              example:
                type: about:blank
                title: Too Many Requests
                status: 429
                detail: 'Rate limit exceeded: 500 per 1 hour'
                instance: /changes
      security:
        - APIKeyHeader: []
components:
  schemas:
    ChangedTable:
      properties:
        table_name:
          type: string
          title: Table Name
          description: Internal database table name (snake_case iXHaus export name).
        last_sync_at:
          type: string
          format: date-time
          title: Last Sync At
          description: UTC timestamp of the last successful sync for this table.
        category:
          anyOf:
            - type: string
            - type: 'null'
          title: Category
          description: >-
            API category slug (e.g. `property`). `null` for tables that have no
            category mapping and are only accessible via `/raw/`.
        api_table_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Api Table Name
          description: >-
            Table name as used in the category endpoint URL (e.g. `properties`).
            `null` when `category` is `null`.
        endpoint_url:
          type: string
          title: Endpoint Url
          description: >-
            Relative URL to fetch data for this table, e.g.
            `/property/properties` or `/raw/ixhaus__ixexpobj`.
      type: object
      required:
        - table_name
        - last_sync_at
        - category
        - api_table_name
        - endpoint_url
      title: ChangedTable
  securitySchemes:
    APIKeyHeader:
      type: apiKey
      in: header
      name: X-API-Key

````

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