> ## 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.

# Export a RAW table with cursor-based pagination

> Returns a paginated page of rows from the specified RAW table. Use `cursor` (from `next_cursor` in the previous response) to fetch the next page. Maximum page size is controlled by `MAX_RAW_PAGE_SIZE` (default: 10000). When `next_cursor` is `null`, all rows have been exported. Tables without a primary key do not support cursor-based pagination. The response header `X-Snapshot-At` contains the ISO-8601 timestamp of the last successful sync for this table (omitted if no sync has occurred yet). All rows within a single cursor sequence are consistent as of that snapshot.



## OpenAPI

````yaml https://api.trassets.ai/openapi.json get /raw/{table_name}
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, meters and bookings, machine-readable and stably
    versioned under `/v1/`.


    ## Quickstart


    ```bash

    export TRASSETS_API_KEY="sk_live_…"

    curl "https://api.trassets.ai/v1/realestates/objects?limit=1" \
      -H "X-API-Key: $TRASSETS_API_KEY"
    ```


    ## 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)

    - **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.


    - **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


    - **Category endpoints**: `X-Total-Count`, `X-Has-More`, `X-Next-Offset`
    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


    This API will adopt URL versioning (`/v1/`) in an upcoming release. Breaking
    changes will then be

    introduced under a new version prefix. Until versioning is in place, the API
    may receive breaking changes.


    ## Field Glossary


    The following fields appear across multiple endpoints:


    | 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
    Portal](https://portal.api.trassets.ai).
  version: 1.0.0
servers: []
security: []
paths:
  /raw/{table_name}:
    get:
      tags:
        - Raw Data
      summary: Export a RAW table with cursor-based pagination
      description: >-
        Returns a paginated page of rows from the specified RAW table. Use
        `cursor` (from `next_cursor` in the previous response) to fetch the next
        page. Maximum page size is controlled by `MAX_RAW_PAGE_SIZE` (default:
        10000). When `next_cursor` is `null`, all rows have been exported.
        Tables without a primary key do not support cursor-based pagination. The
        response header `X-Snapshot-At` contains the ISO-8601 timestamp of the
        last successful sync for this table (omitted if no sync has occurred
        yet). All rows within a single cursor sequence are consistent as of that
        snapshot.
      operationId: get_raw_table_page_raw__table_name__get
      parameters:
        - name: table_name
          in: path
          required: true
          schema:
            type: string
          description: Name of the RAW table to export
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            default: 1000
            minimum: 1
            maximum: 10000
          description: 'Rows per page. Maximum: 10000.'
        - name: cursor
          in: query
          required: false
          schema:
            type: string
          description: >-
            Pagination cursor from `next_cursor` of the previous response. Omit
            for the first page. When the response contains `next_cursor: null`,
            all rows have been exported.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RawTablePage'
              examples:
                success:
                  summary: First page of a RAW table export
                  value:
                    data:
                      - contract_id: 1
                        tenant: Müller GmbH
                    count: 1
                    next_cursor: eyJjb2wiOiAiY29udHJhY3RfaWQiLCAidmFsIjogMX0=
                    table_name: ixhaus_contracts
                    total_rows: 12500
                last_page:
                  summary: Last page (next_cursor is null)
                  value:
                    data:
                      - contract_id: 12500
                        tenant: Schmidt AG
                    count: 1
                    next_cursor: null
                    table_name: ixhaus_contracts
                    total_rows: 12500
        '400':
          description: Bad Request
          content:
            application/problem+json:
              example:
                type: about:blank
                title: Bad Request
                status: 400
                detail: Invalid cursor or table identifier
                instance: /raw/{table_name}
        '401':
          description: Unauthorized
          content:
            application/problem+json:
              example:
                type: about:blank
                title: Unauthorized
                status: 401
                detail: API key required
                instance: /raw/{table_name}
        '403':
          description: Forbidden
          content:
            application/problem+json:
              example:
                type: about:blank
                title: Forbidden
                status: 403
                detail: Invalid or disabled API key
                instance: /raw/{table_name}
        '404':
          description: Not Found
          content:
            application/problem+json:
              example:
                type: about:blank
                title: Not Found
                status: 404
                detail: Table not found or not accessible
                instance: /raw/{table_name}
        '422':
          description: Unprocessable Entity
          content:
            application/problem+json:
              example:
                type: about:blank
                title: Unprocessable Entity
                status: 422
                detail: 'query -> limit: Input should be less than or equal to 10000'
                instance: /raw/{table_name}
        '429':
          description: Too Many Requests
          content:
            application/problem+json:
              examples:
                global_rate_limit:
                  summary: Global per-API-key floor (500/hour, applies everywhere)
                  value:
                    type: about:blank
                    title: Too Many Requests
                    status: 429
                    detail: 'Rate limit exceeded: 500 per 1 hour'
                    instance: /raw/{table_name}
                export_rate_limited:
                  summary: Optional, tighter per-customer/table override
                  value:
                    type: export_rate_limited
                    title: Too Many Requests
                    status: 429
                    detail: 'Rate limit exceeded: 100 per hour (customer override)'
                    instance: /raw/{table_name}
                too_many_parallel_exports:
                  summary: Too many concurrent requests to this endpoint
                  value:
                    type: too_many_parallel_exports
                    title: Too Many Requests
                    status: 429
                    detail: Maximum 3 concurrent exports per customer exceeded
                    instance: /raw/{table_name}
      security:
        - APIKeyHeader: []
components:
  schemas:
    RawTablePage:
      properties:
        data:
          items:
            type: object
          type: array
          title: Data
        count:
          type: integer
          title: Count
        next_cursor:
          anyOf:
            - type: string
            - type: 'null'
          title: Next Cursor
        table_name:
          type: string
          title: Table Name
        total_rows:
          anyOf:
            - type: integer
            - type: 'null'
          title: Total Rows
      type: object
      required:
        - data
        - count
        - next_cursor
        - table_name
        - total_rows
      title: RawTablePage
  securitySchemes:
    APIKeyHeader:
      type: apiKey
      in: header
      name: X-API-Key

````