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.
curl --request GET \
--url https://api.trassets.ai/changes \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.trassets.ai/changes"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.trassets.ai/changes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.trassets.ai/changes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.trassets.ai/changes"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.trassets.ai/changes")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.trassets.ai/changes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"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"
}
]Autorisierungen
Abfrageparameter
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
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).
accounting, contracts, depreciation, operations, property, stakeholder Antwort
List of changed tables (may be empty if nothing has changed)
Internal database table name (snake_case iXHaus export name).
UTC timestamp of the last successful sync for this table.
API category slug (e.g. property). null for tables that have no category mapping and are only accessible via /raw/.
Table name as used in the category endpoint URL (e.g. properties). null when category is null.
Relative URL to fetch data for this table, e.g. /property/properties or /raw/ixhaus__ixexpobj.
curl --request GET \
--url https://api.trassets.ai/changes \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.trassets.ai/changes"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.trassets.ai/changes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.trassets.ai/changes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.trassets.ai/changes"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.trassets.ai/changes")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.trassets.ai/changes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"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"
}
]