Ihre Unternehmensdaten hochladen
Einordnung
Durch das Hochladen kann Kaleidr Fragen mithilfe der Daten Ihrer Organisation beantworten. Dies ist eine Enterprise-Funktion. Eine veröffentlichte Datenversion wird vom Assistenten in Kaleidr Studio für angemeldete Mitglieder genutzt. Für Ihre Website oder Ihr Backend sind drei weitere Schritte nötig: einen Schlüssel mit Leserechten erstellen, mit diesem Schlüssel eine Frage stellen und kontrollieren, ob Ihre Orte in der Antwort erscheinen. Antworten aus eigenen Daten erläutert den gesamten Ablauf. Diese Seite beschreibt ausschließlich den Upload: Anfragen, Felder, Grenzen, Fehler sowie das Unveröffentlichen und Löschen einer Version.
Es geht hier nicht um Dateien, die Sie im Data-Bereich einer Studio-Karte hinzufügen, beispielsweise Tabellen, GeoJSON oder GPX-Tracks. Das ist eine separate Funktion für alle Tarife; siehe Datensätze auf einer Karte.
Es gibt zwei Wege zum Hochladen, die dieselbe Verarbeitung verwenden:
- Oberfläche: Der Bereich Data for AI Answers unten im Data-Panel jeder Karte in Kaleidr Studio. Nur Eigentümer und Administratoren von Organisationen mit Uploadberechtigung sehen die Upload-Steuerung. Siehe Upload in Studio.
- API auf dieser Seite: Die Studio-Oberfläche ruft dieselben Endpunkte auf. Alle Dateiformate, Limits, Status und Fehler gelten daher für beide Wege; eine mit einem Weg erstellte Version erscheint auch im anderen.
Drei Eigenschaften sollten Sie vor dem Hochladen kennen:
- Ihre Daten werden beim Beantworten einer Frage nachgeschlagen. Kaleidr greift dann auf die veröffentlichte Release zu; wenn sie nicht mehr veröffentlicht ist, nutzen spätere Antworten die Daten sofort nicht mehr.
- Nur Ihre Organisation erhält Ihre Daten. Sie sind nach Organisation getrennt und erscheinen nicht auf der Kaleidr-Verbraucherkarte oder in Antworten anderer Organisationen.
- Ihre Werte werden nie erfunden. Ein optionales Hilfswerkzeug schlägt anhand der Kopfzeile und höchstens fünf Beispieldatensätzen eine Spaltenzuordnung vor. Danach wird jede Zeile anhand der von Ihnen bestätigten Zuordnung transformiert. Fehlerhafte Zuordnungen müssen korrigiert und erneut verarbeitet werden; Preise, Daten und Namen werden nicht erfunden.
Verfügbarkeit
| Voraussetzung | Einzelheiten |
|---|---|
| Tarif | Enterprise. Free und Pro erhalten für Upload, Publish, Re-Dispatch und Mapping-Vorschläge 403 vendor_data_not_on_plan. Entscheidend ist der Organisationstarif unter kaleidr.com/billing. Studio besitzt keinen separaten Tarif. |
| Rolle | Eigentümer oder Administrator der Organisation, sonst 403 org_admin_required. |
| Grenzen | In der Organisationsvereinbarung festgelegt; siehe Grenzen. GET /shared-api/datahub/limits liefert die eigenen Werte. Referenz |
| Oberfläche | Data for AI Answers im Data-Bereich von Kaleidr Studio oder die API auf dieser Seite. Beide durchlaufen dieselben Prüfungen. |
Welche Aufrufe welche Berechtigungen erfordern:
| Aufrufe | Rolle | Tarif |
|---|---|---|
| Mapping vorschlagen, hochladen, veröffentlichen, erneut verarbeiten | Eigentümer oder Administrator | Enterprise |
| Grenzen, Ingest-Status und Release-Liste lesen | Eigentümer oder Administrator | Alle |
| Veröffentlichung aufheben, Release löschen | Eigentümer oder Administrator | Alle |
Die zweite und dritte Zeile funktionieren unabhängig vom Tarif. Auch eine Organisation, die Enterprise verlässt, kann ihre früheren Uploads einsehen und entfernen.
Die Verwendung der Daten ist ebenfalls auf Enterprise begrenzt. Der Studio-Assistent nutzt die veröffentlichte Version nur während des Enterprise-Tarifs. Für Antworten über API-Schlüssel oder SDK ist die zusätzliche Berechtigung vendor erforderlich, die ausschließlich Enterprise-Organisationen erhalten. Siehe Antworten aus eigenen Daten.
Der Abschnitt Data for AI Answers in Studio hängt von Tarif und Rolle ab: siehe Anzeige bei fehlender Uploadberechtigung.
Uploadgrenzen Ihrer Organisation
Rufen Sie die Limits vor dem Upload ab. Die Studio-Oberfläche tut dies beim Öffnen des Bereichs.
| Feld | Beschreibung |
|---|---|
| Anfrage | GET /shared-api/datahub/limits |
| Berechtigung | Eigentümer oder Administrator, jeder Tarif |
| Query | Optional org_id, wenn Sie mehrere Organisationen verwalten. |
curl https://api.kaleidr.com/shared-api/datahub/limits \
-H "Authorization: Bearer $KALEIDR_ACCESS_TOKEN"
Im Enterprise-Beispiel werden die drei konkreten Limits absichtlich nicht genannt: Sie stammen aus Ihrer Vereinbarung und ein Beispielwert wäre für Ihre Organisation nicht gültig. limits enthält immer die drei Integer-Felder aus der folgenden Tabelle.
{
"can_upload": true,
"plan": "enterprise",
"limits": { "…": "places, documents and artifact_mb: three integers, described below" },
"reason": null
}
Auch bei Free und Pro antwortet der Aufruf mit 200 und einer Begründung:
{
"can_upload": false,
"plan": "pro",
"limits": { "places": 0, "documents": 0, "artifact_mb": 0 },
"reason": "vendor_data_not_on_plan"
}
| Feld | Typ | Bedeutung |
|---|---|---|
can_upload | boolean | Ob diese Organisation hochladen darf. |
plan | string oder null | Zugrunde liegender Tarif: free, pro oder enterprise. |
limits.places | integer | Orte pro Upload; bei CSV die Datenzeilen. |
limits.documents | integer | Dokumente pro Upload. |
limits.artifact_mb | integer | Maximale Dateigröße in MiB. |
reason | string oder null | vendor_data_not_on_plan bei can_upload, sonst null. Ohne Uploadberechtigung sind alle Limits 0. false |
Diese Zahlen gelten für Ihre Organisation und sind in ihrer Vereinbarung festgelegt. Kein Grenzwert darf die Obergrenze überschreiten, die die Plattform für einen Upload vorgibt: Für jeden der drei Werte besteht eine solche technische Höchstgrenze, die auch durch eine Vereinbarung nicht erhöht werden kann.
| Status | Bedeutung |
|---|---|
| 200 | Für Eigentümer und Administratoren in allen Tarifen. Unter Enterprise steht can_upload: false, die Anfrage wird nicht verweigert. |
| 401 | Zugriffstoken fehlt, ist abgelaufen oder hat den falschen Typ. |
403 org_admin_required | Das Konto ist kein Eigentümer oder Administrator. |
Authentifizierung
Alle Aufrufe erwarten das Zugriffstoken des angemeldeten Kaleidr-Kontos als Bearer-Token:
Authorization: Bearer <account access token>
- Dies ist kein API-Schlüssel. Schlüssel vom Typ
kld_pk_…oderkld_sk_…werden abgelehnt. API-Schlüssel identifizieren Integrationen; Uploads sind Verwaltungsaktionen einer Organisation und werden deshalb mit einem angemeldeten Benutzer und seiner Rolle autorisiert. - Verwenden Sie das Zugriffstoken, nicht das ID-Token.
- Das Token gehört zu einem angemeldeten Eigentümer oder Administrator und läuft mit dessen Sitzung ab. Ein langlebiger Zugriff für diese API ist derzeit nicht verfügbar. Für automatisierte Uploads kontaktieren Sie Kaleidr, bevor Sie die Integration entwickeln.
- In der Studio-Oberfläche verwalten Sie keine Tokens selbst; sie nutzt die aktuelle Benutzersitzung.
Alle Pfade auf dieser Seite liegen unter https://api.kaleidr.com. Die Beispiele lesen das Token aus einer Umgebungsvariablen:
export KALEIDR_ACCESS_TOKEN='<account access token>'
Wenn Sie mehrere Organisationen verwalten, verwenden Sie org_id zur Auswahl: beim Upload im Request-Body, ansonsten als Query-Parameter ?org_id=. Ohne Angabe wird die primäre Organisation verwendet.
Was hochgeladen werden kann
Ein Upload besteht aus einer Textdatei, die als String in einer JSON-Anfrage gesendet wird. Die Dateiendung bestimmt den Parser.
| Ihre Daten | Format | Inhalt |
|---|---|---|
| Ortsliste | .csv mit festen Spaltennamen, ohne Mapping | Orte |
| Tabellenexport mit einer Zeile pro Nacht, Zimmer oder Tarif | .csv mit mapping_spec | Orte, Zimmertypen, Tarifpläne, Tagespreise, Verfügbarkeit |
| Vollständige strukturierte Daten | .json-Bundle | Alle genannten Daten plus Öffnungszeiten und Dokumente |
Jeder Upload muss mindestens einen Ort enthalten.
CSV mit Orten
Die Kopfzeile verwendet diese Spaltennamen:
| Spalte | Erforderlich | Hinweise |
|---|---|---|
name | Ja | Eine Zeile ohne Namen führt zu einem Uploadfehler samt Zeilennummer. |
timezone | Ja | Eine IANA-Zone wie Europe/London. |
lat, lng | Eine der Positionsvarianten | Koordinaten werden unverändert verwendet. |
address | Eine der Positionsvarianten | Wird zur Standortbestimmung genutzt, falls lat und lng fehlen. |
category | Nein | Kurze Kategorie wie hotel oder restaurant. |
ref | Nein | Eigene Kennung der Zeile; ohne ref wird die Zeilennummer verwendet. |
name,timezone,lat,lng,address,category
Harbor Hotel,Europe/London,51.5079,-0.0877,"1 Example Street, London",hotel
Canal House,Europe/Amsterdam,,,"Example Gracht 12, Amsterdam",hotel
Tabelle mit Spaltenzuordnung
Ein Export mit einer Zeile pro Beobachtung (Unterkunft, Zimmer, Plan, Datum, Preis) kann nicht einfach anhand fester Spaltennamen eingelesen werden. Übergeben Sie mapping_spec, um die Zuordnung Ihrer Spalten zu Zielfeldern zu definieren.
Property,Address,Room,Plan,Date,Nightly Rate,Available
Harbor Hotel,"1 Example Street, London",Double,Flexible,2026-11-06,189.00,4
Harbor Hotel,"1 Example Street, London",Suite,Flexible,2026-11-06,320.00,1
{
"places": {
"ref_from": ["Property"],
"fields": {
"name": "Property",
"address": "Address",
"timezone": { "const": "Europe/London" },
"category": { "const": "hotel" }
}
},
"room_types": { "ref_from": ["Room"], "fields": { "name": "Room" } },
"rate_plans": { "ref_from": ["Plan"], "fields": { "name": "Plan" } },
"daily_rates": {
"fields": {
"stay_date": "Date",
"price_amount": "Nightly Rate",
"price_currency": { "const": "GBP" }
}
},
"daily_inventory": {
"fields": { "stay_date": "Date", "units_available": "Available" }
}
}
Regeln für das Mapping:
| Teil | Bedeutung |
|---|---|
| Abschnitte | places (erforderlich), room_types, rate_plans, daily_rates, daily_inventory. Verwenden Sie nur Abschnitte, für die Daten vorliegen. |
ref_from | Spalten zur Identifizierung. Zeilen mit denselben Werten sind derselbe Ort, Zimmertyp oder Tarifplan. |
fields | Jedes Zielfeld wird von einer Spalte gespeist. Für wenige Felder ist auch ein konstanter Wert wie { "const": "value" } zulässig. |
Ein Mapping darf nur die folgenden Felder setzen. Die letzte Spalte nennt jene, die eine Konstante akzeptieren.
| Abschnitt | Zuordnungsfähige Felder | Konstante zulässig |
|---|---|---|
places | name, address, timezone, category, lat, lng, overture_id | timezone, category |
room_types | name | name |
rate_plans | name, currency, cancellation_policy, board_basis | name, currency |
daily_rates | stay_date (ISO-Datum), price_amount (nichtnegative Zahl), price_currency (drei Buchstaben) | price_currency |
daily_inventory | stay_date, units_available (nichtnegative ganze Zahl) | Keine |
Daraus ergeben sich zwei Regeln, deren Verletzung einen Validierungsfehler auslöst:
- Unbekannte Felder werden abgelehnt. Die Fehlermeldung nennt das unzulässige Feld und die erlaubten, etwa
room_types.fields.beds: not a field a mapping can set -- room_types takes name. Zusätzliche Eigenschaften wie Bettenzahlen oder freie Attribute gehören in ein JSON-Bundle. - Konstanten sind nur an den genannten Stellen erlaubt. Preise, Daten, Mengen, Ortsnamen und Koordinaten müssen aus einer Quellspalte stammen, etwa
daily_rates.fields.price_amount: must name a column -- a constant cannot supply this field. Konstanten gelten nur für Werte, die für die gesamte Tabelle gleich sind, wie Zeitzone oder Währung.
Die Fehler erscheinen unter errors bei einem Vorschlag und im error_report, wenn das Mapping beim Upload verwendet wird. Die Verarbeitung schlägt fehl und stellt keine Daten bereit.
Enthält das Mapping daily_rates, müssen auch room_types und rate_plans vorhanden sein, da jeder Preis beides benötigt. Fehlt eine Tarifplanspalte, kann der Name des Plans als Konstante angegeben werden.
Mappings gelten nur für .csv. Ein mapping_spec zusammen mit .json lässt die Verarbeitung fehlschlagen.
JSON-Bundle
Eine .json-Datei ist ein Objekt mit beliebigen der folgenden Listen. Einträge verweisen über ref aufeinander.
{
"places": [
{
"ref": "harbor",
"name": "Harbor Hotel",
"timezone": "Europe/London",
"lat": 51.5079,
"lng": -0.0877,
"address": "1 Example Street, London",
"category": "hotel"
}
],
"room_types": [{ "ref": "double", "place_ref": "harbor", "name": "Double" }],
"rate_plans": [{ "ref": "flex", "place_ref": "harbor", "name": "Flexible" }],
"daily_rates": [
{
"place_ref": "harbor",
"room_type_ref": "double",
"rate_plan_ref": "flex",
"stay_date": "2026-11-06",
"price_amount": 189.0,
"price_currency": "GBP"
}
],
"daily_inventory": [
{ "place_ref": "harbor", "room_type_ref": "double", "stay_date": "2026-11-06", "units_available": 4 }
],
"hours": [
{ "place_ref": "harbor", "weekday": 0, "opens": "07:00", "closes": "23:00" },
{ "place_ref": "harbor", "valid_from": "2026-12-25", "valid_through": "2026-12-25", "is_closed": true }
],
"documents": [
{ "title": "Cancellation policy", "text": "Free cancellation until 18:00 on the day before arrival." }
]
}
| Liste | Pflichtfelder | Hinweise |
|---|---|---|
places | name, timezone und entweder lat mit lng oder address | ref muss eindeutig sein; mindestens ein Ort. |
room_types, rate_plans | place_ref, name | ref muss innerhalb der jeweiligen Liste eindeutig sein. |
daily_rates | place_ref, room_type_ref, rate_plan_ref, stay_date, price_amount, price_currency | |
daily_inventory | place_ref, room_type_ref, stay_date, units_available | |
hours | place_ref, sowie weekday oder valid_from | weekday von 0 bis 6, Montag = 0. opens und closes sind Uhrzeiten. |
documents | title, text | Nur direkt enthaltener Text. |
Optional sind weitere Felder zulässig, jeweils mit eigener Größenbegrenzung; siehe Feldgrenzen.
Hinweise zu Dokumenten:
- Ein Dokument besteht aus
titleund dem enthaltenentext. Hinterlegte Speicherorte oder Schlüssel werden ignoriert; ein Dokument darf nicht auf eine Datei verweisen. - Die optionale Angabe
mimebeschreibt das Textformat. Erlaubt sindtext/plain,text/markdownundtext/html; alle anderen Werte werden alstext/plaingespeichert.
Zahlen müssen endlich sein. NaN und Infinity sind als Koordinate, Preis oder Anzahl sowie in frei strukturierten JSON-Feldern unzulässig und werden als Zeilenfehler gemeldet.
Uploadablauf
Ein Upload erzeugt einen Ingest (Auftrag) und ein Release (versioniertes Ergebnis). Ein Release ist bis zur Veröffentlichung ein draft. Beim Veröffentlichen ersetzt die neue Version die bisherige atomar, sodass Leser keinen halbfertigen Stand sehen. Die ältere Version bleibt bis zum Ersatz nutzbar. Nur das ausdrückliche Unveröffentlichen kann dazu führen, dass keine Version veröffentlicht ist.
propose a mapping ─► stage a preview ─► check the result ─► publish
(optional, POST /ingests GET /ingests/{id} POST /ingests/{id}/publish
for a sheet) preview: true
later, to take a release back out: unpublish ─► delete
POST /releases/{id}/unpublish DELETE /releases/{id}
1. Mapping vorschlagen lassen (optional)
Verwenden Sie dies bei einer Tabelle ohne Mapping. Senden Sie nur den Anfang der Datei: Kopfzeile und einige Beispieldatenzeilen statt des gesamten Exports.
| Feld | Beschreibung |
|---|---|
| Anfrage | POST /inference-api/vendor/mapping/propose |
| Berechtigung | Eigentümer oder Administrator einer Enterprise-Organisation. |
| Body | { "csv_head": "<the first characters of your file>" } |
| Grenze | csv_head zwischen 1 und 16.384 Zeichen; höchstens 30 Vorschläge pro Konto und Stunde. |
| Kosten | Jeder Vorschlag verbraucht AI-Credits Ihrer Organisation in Höhe der verwendeten Tokens. Die übrigen Aufrufe kosten keine AI-Credits. |
curl -X POST https://api.kaleidr.com/inference-api/vendor/mapping/propose \
-H "Authorization: Bearer $KALEIDR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"csv_head":"Property,Address,Room,Plan,Date,Nightly Rate,Available\nHarbor Hotel,\"1 Example Street, London\",Double,Flexible,2026-11-06,189.00,4\nHarbor Hotel,\"1 Example Street, London\",Suite,Flexible,2026-11-06,320.00,1\n"}'
{
"mapping_spec": { "places": { "ref_from": ["Property"], "fields": { "name": "Property", "address": "Address", "timezone": { "const": "Europe/London" } } }, "room_types": { "ref_from": ["Room"], "fields": { "name": "Room" } } },
"notes": "Time zone inferred from the addresses.",
"columns": ["Property", "Address", "Room", "Plan", "Date", "Nightly Rate", "Available"],
"sample_result": { "places": 1, "room_types": 2, "rate_plans": 1, "daily_rates": 2, "daily_inventory": 2 },
"errors": []
}
Die Antwort verstehen:
- Prüfen Sie vor allem
sample_result. Das vorgeschlagene Mapping wird auf die Beispielzeilen angewendet.sample_resultmeldet die Anzahl erzeugter Einträge pro Abschnitt. So erkennen Sie noch vor dem Upload ein scheinbar korrektes Mapping ohne Ergebnisse. errorsdarf auch bei HTTP 200 gefüllt sein. Ein nicht anwendbarer Vorschlag wird mit sämtlichen Problemen zurückgegeben, damit Sie ihn bearbeiten können. Beispiele sind fehlende Pflichtfelder, nicht vorhandene Spaltennamen, ungültige IANA-Zeitzonen oder Währungscodes mit falscher Länge.- Nur vollständige Zeilen werden geprüft, höchstens fünf. Wenn
csv_headnicht mit einem Zeilenumbruch endet, wird die letzte Zeile verworfen, damit abgeschnittene Daten nicht als vollständig gelten. - Nichts wird gespeichert. Sie können den Vorschlag bearbeiten und anschließend hochladen.
| Status | Bedeutung |
|---|---|
403 org_admin_required | Sie sind kein Eigentümer oder Administrator einer Organisation. |
403 vendor_data_not_on_plan | Sie haben eine Verwaltungsrolle, aber keine Enterprise-Organisation. |
| 422 | csv_head ist länger als 16.384 Zeichen, hat keine Kopfzeile, doppelte Spaltennamen oder keine vollständige Datenzeile. Die Ursache steht in detail. |
| 429 (Ratenbegrenzung) | Mehr als 30 Vorschläge pro Konto in der vergangenen Stunde. |
| 429 (AI-Credits) | Die AI-Credits der Organisation sind aufgebraucht. |
502 mapping proposal unavailable | Vorschlag konnte nicht erzeugt werden. Versuchen Sie es erneut oder schreiben Sie das Mapping selbst. |
Zwei Arten von 429 unterscheiden
Beide Fälle verwenden HTTP 429. Lesen Sie den Antwortkörper:
| Merkmal | Ratenbegrenzung | AI-Credits erschöpft |
|---|---|---|
| Body | { "detail": "at most 30 mapping proposals per hour" } | Standard-Kontingentantwort |
| Erkennung | Kein error-Feld, detail enthält den angegebenen Satz. | "error": "quota_exceeded" plus limit, used, remaining, reset_at. |
| Maßnahme | Warten; das Limit gilt je Konto für die letzte Stunde. | Bis reset_at warten, Credits hinzufügen oder Mapping manuell schreiben. |
{
"error": "quota_exceeded",
"detail": "Usage limit reached. Please try again later.",
"tier": "enterprise",
"remaining": 0,
"reset_at": "2026-11-01T04:00:00+00:00",
"period": "month",
"reset_in_seconds": 1296000
}
Das Beispiel lässt vier tatsächlich vorhandene Felder weg. limit und used stehen für die Kontingentgrenzen und den Verbrauch Ihrer Organisation gemäß Vereinbarung. product und meter bezeichnen den Studio-Zähler statt den API-Zähler, doch beide verwenden denselben AI-Credit-Pool. Behandeln Sie error wie bei jeder anderen Kontingentverweigerung.
So wird ein Mapping-Vorschlag abgerechnet:
- Abgewiesene Anfragen (403, 422 oder 429 wegen der Ratenbegrenzung) kosten nichts. Auch eine wegen der Beispieldaten mit 422 abgelehnte Anfrage zählt zum Limit von 30 Anfragen pro Stunde.
- Ein 502, weil keine Antwort geliefert wurde, kostet nichts.
- Ein 502, weil eine erhaltene Antwort nicht nutzbar war, wird anhand der Antwort-Tokens abgerechnet.
- Ein erzeugter Vorschlag mit nicht leerer
errors-Liste kostet wie jeder andere Vorschlag Credits.
In Studio heißen die Hinweise „You have reached the hourly limit for mapping proposals. Try again later, or edit the mapping by hand.“ beziehungsweise „Your organization's AI credits for this period are used up. You can still write the mapping by hand.“ Ein manuell erstelltes Mapping benötigt keinen Vorschlag und keine AI-Credits.
2. Vorschau bereitstellen
| Feld | Beschreibung |
|---|---|
| Anfrage | POST /shared-api/datahub/ingests |
| Berechtigung | Eigentümer oder Administrator, Enterprise |
| Header | Idempotency-Key, erforderlich, 8–128 Zeichen |
| Body-Feld | Typ | Standard | Bedeutung |
|---|---|---|---|
filename | String bis 200 Zeichen | Pflicht | Muss auf .csv oder .json enden; die Endung wählt den Parser. |
artifact | String | Pflicht | Der Rohtext der Datei. |
source | "csv", "api" oder "manual" | "csv" | Kennzeichen der Herkunft, nicht zur Wahl des Parsers. "json" ist ungültig und führt zu 422. |
mapping_spec | Objekt bis 64 KB | Keines | Zuordnung einer CSV-Tabelle; bei Orts-CSV oder JSON-Bundle weglassen. |
preview | boolean | false | true stellt zur Kontrolle bereit; false veröffentlicht nach Verarbeitung. |
org_id | UUID | Primäre Organisation | Zielorganisation. |
curl -X POST https://api.kaleidr.com/shared-api/datahub/ingests \
-H "Authorization: Bearer $KALEIDR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: places-2026-10-10-a" \
-d '{
"filename": "places.csv",
"source": "csv",
"preview": true,
"artifact": "name,timezone,lat,lng,address,category\nHarbor Hotel,Europe/London,51.5079,-0.0877,\"1 Example Street, London\",hotel\n"
}'
{
"ingest_id": "5f0c2a1e-…",
"release_id": "a81d77b0-…",
"status": "pending",
"status_url": "/shared-api/datahub/ingests/5f0c2a1e-…",
"dispatched": true
}
Idempotency-Key gilt innerhalb Ihrer Organisation. Ein wiederholter Aufruf mit demselben Schlüssel liefert den bestehenden Ingest mit dispatched: false und erzeugt keinen zweiten. Für eine absichtliche erneute Bereitstellung, etwa nach einer Mappingänderung, verwenden Sie einen neuen Schlüssel, sonst erhalten Sie den Auftrag mit dem alten Mapping.
dispatched meldet, ob die Verarbeitung mit diesem Aufruf gestartet wurde. Bei einem neuen Ingest bedeutet false, dass er noch pending ist; starten Sie ihn über den Re-Dispatch-Aufruf.
Verwenden Sie preview: true bei einem ersten Upload und nach Änderungen des Mappings.
Ein Upload gleichzeitig und eine Stundenbegrenzung. Neue Uploads werden verweigert, solange ein anderer Upload der Organisation verarbeitet wird oder in der vergangenen Stunde 30 Uploads gestartet wurden:
| Status | detail | Bedeutung | Maßnahme |
|---|---|---|---|
| 409 | org_ingest_in_progress | Ein anderer Organisations-Ingest steht auf running. | Status abfragen, bis er succeeded oder failed erreicht, dann mit demselben Idempotency-Key erneut anfragen. |
| 429 | ingest_rate_limited | In einer Stunde wurden 30 Ingests erzeugt; Vorschauen zählen. | Warten; das Mapping lieber über den Vorschlagsaufruf überprüfen als wiederholt bereitstellen. |
| 413 | request_body_too_large | Die gesamte Anfrage überschreitet 32 MiB. | Datei verkleinern; siehe Grenzen. |
Wenn Sie einen bereits verwendeten Idempotency-Key erneut senden, ist das kein neuer Upload: Der vorhandene Ingest wird zurückgegeben und nicht mit dem oben genannten 409 oder 429 abgelehnt. Der Anfragetext wird nicht mit dem ursprünglichen verglichen; eine andere Datei mit einem bereits verwendeten Schlüssel wird daher verworfen. Die Anfrage wird jedoch geprüft, bevor der Schlüssel gesucht wird. Eine Wiederholung kann somit mit 413, mit 403 org_admin_required oder vendor_data_not_on_plan oder mit 422 wegen eines der Grenzwerte abgelehnt werden. Der Schlüssel bleibt gespeichert, solange seine Release existiert. Nachdem die Release gelöscht oder automatisch entfernt wurde, beginnt derselbe Schlüssel einen neuen Upload.
3. Ergebnis prüfen
| Feld | Beschreibung |
|---|---|
| Anfrage | GET /shared-api/datahub/ingests/{ingest_id} |
| Berechtigung | Eigentümer oder Administrator, alle Tarife |
curl https://api.kaleidr.com/shared-api/datahub/ingests/5f0c2a1e-… \
-H "Authorization: Bearer $KALEIDR_ACCESS_TOKEN"
{
"ingest_id": "5f0c2a1e-…",
"release_id": "a81d77b0-…",
"status": "succeeded",
"attempts": 1,
"row_counts": {
"places": 1,
"room_types": 0,
"rate_plans": 0,
"daily_rates": 0,
"daily_inventory": 0,
"hours": 0,
"documents": 0
},
"error_report": null,
"created_at": "2026-10-10T09:12:04Z",
"started_at": "2026-10-10T09:12:20Z",
"finished_at": "2026-10-10T09:12:41Z"
}
status wechselt von pending zu running und endet auf succeeded oder failed.
- Bei
succeedednenntrow_countsdie verarbeiteten Elemente je Datenart. Vergleichen Sie die Zahlen vor dem Veröffentlichen mit Ihren Erwartungen. - Bei
failedenthälterror_report.errorsGründe je fehlerhafter Zeile. Höchstens 200 Einträge werden angezeigt;error_report.error_countist die Gesamtsumme. Ein Fehlschlag verändert das derzeit veröffentlichte Release nicht.
{
"status": "failed",
"error_report": {
"errors": [
"places[1]: missing lat/lng -- supply coordinates, or an address to geocode from",
"places[2]: unknown timezone 'London'"
],
"error_count": 2
}
}
Ein Upload ist vollständig oder überhaupt nicht erfolgreich. Sobald eine Zeile die Validierung nicht besteht, werden keine Daten bereitgestellt. Korrigieren Sie die Datei und verwenden Sie einen neuen Idempotency-Key.
4. Veröffentlichen
| Feld | Beschreibung |
|---|---|
| Anfrage | POST /shared-api/datahub/ingests/{ingest_id}/publish |
| Berechtigung | Eigentümer oder Administrator, Enterprise |
| Body | Keiner |
curl -X POST https://api.kaleidr.com/shared-api/datahub/ingests/5f0c2a1e-…/publish \
-H "Authorization: Bearer $KALEIDR_ACCESS_TOKEN"
Die Antwort entspricht der Form des Staging-Ergebnisses mit status: "pending". Veröffentlicht werden kann nur ein mit preview: true bereitgestellter und erfolgreich (succeeded) abgeschlossener Ingest.
Beim Veröffentlichen wird die Datei erneut verarbeitet. Dieselbe Datei und Zuordnung liefern dieselben Zählungen und Kennungen wie in der Vorschau. Nur Orte, die allein über ihre Adresse lokalisiert wurden, können minimal andere Koordinaten erhalten, wenn die neue Adressauflösung besser ist.
Fragen Sie den Status erneut ab. Der Ingest wechselt wieder zu pending, läuft und endet mit succeeded. Dann ist das neue Release veröffentlicht und das vorherige ersetzt.
Behandeln Sie 409 hier als „bereits im Gange“, nicht als Aufforderung zur Wiederholung. Der Publish-Aufruf benötigt keinen Idempotency-Key. War der erste Aufruf serverseitig erfolgreich, ist beim erneuten Aufruf 409 ingest_is_not_a_preview möglich; überschneiden sich Anfragen, erscheint publish_already_in_progress. Beides bedeutet, dass die Veröffentlichung läuft oder bereits läuft/lief. Prüfen Sie den Ingest-Status statt erneut zu veröffentlichen.
Ein 409 hat eine andere Bedeutung: org_ingest_in_progress zeigt an, dass gerade ein anderer Upload Ihrer Organisation verarbeitet wird; diese Veröffentlichung wurde daher nicht gestartet. Warten Sie, bis der andere Ingest succeeded oder failed erreicht, und rufen Sie „Publish“ anschließend erneut auf.
Veröffentlichung in einem Schritt
Senden Sie preview: false oder lassen Sie preview weg, um direkt nach dem Lesen der Datei zu veröffentlichen. Ein separater Publish-Aufruf entfällt. Dies eignet sich für regelmäßige Uploads mit zuvor geprüftem Mapping.
Einen festhängenden Ingest erneut starten
| Feld | Beschreibung |
|---|---|
| Anfrage | POST /shared-api/datahub/ingests/{ingest_id}/dispatch |
| Berechtigung | Eigentümer oder Administrator, Enterprise |
Verwenden Sie den Aufruf, wenn der Ingest auf pending bleibt (beispielsweise bei dispatched: false) oder aus einem nicht datenbedingten Grund failed ist. Es gibt maximal drei Verarbeitungsversuche. (dispatched; false)
| Status | Bedeutung |
|---|---|
409 ingest_already_succeeded | Keine Aktion nötig. |
409 ingest_already_running | Der Auftrag wird bereits verarbeitet. |
409 ingest_attempts_exhausted | Drei Versuche sind verbraucht; mit neuem Idempotency-Key hochladen. |
409 org_ingest_in_progress | Ein anderer Auftrag der Organisation läuft; warten und erneut aufrufen. |
404 ingest_not_found | Kein Ingest mit dieser ID in Ihrer Organisation, oder die zugehörige Release wird gelöscht oder wurde gelöscht. Ein Neustart ist nicht möglich. |
Releases auflisten
| Feld | Beschreibung |
|---|---|
| Anfrage | GET /shared-api/datahub/releases |
| Berechtigung | Eigentümer oder Administrator, alle Tarife |
| Query | Optional status: draft, published, superseded, failed oder deleting; andere Werte führen zu 422 unknown_release_status. Optional auch org_id. |
curl "https://api.kaleidr.com/shared-api/datahub/releases?status=published" \
-H "Authorization: Bearer $KALEIDR_ACCESS_TOKEN"
[
{
"id": "a81d77b0-…",
"status": "published",
"published_at": "2026-10-10T09:15:02Z",
"superseded_at": null,
"created_at": "2026-10-10T09:12:04Z",
"state": "published",
"ingest_id": "5f0c2a1e-…"
}
]
| Feld | Typ | Bedeutung |
|---|---|---|
id | UUID | Release-ID für Unpublish und Delete. |
status | string | draft, published, superseded, failed oder deleting. |
published_at | Zeitstempel oder null | Zeitpunkt der Veröffentlichung. |
superseded_at | Zeitstempel oder null | Zeitpunkt der Ersetzung, Unveröffentlichung oder des Vorschauablaufs. |
created_at | Zeitstempel | Annahmezeitpunkt des Uploads. |
state | string | Der aktuelle Aktionsstatus des Releases, siehe Tabelle. |
ingest_id | UUID oder null | Zugehöriger Ingest für Status und Publish. |
state unterteilt den Status draft in zwei Fälle, damit Clients die passende Aktion anbieten können, ohne einen weiteren Aufruf zu benötigen: (status)
state | status | Bedeutung | Erlaubte Aktion |
|---|---|---|---|
processing | draft | Upload wartet oder wird verarbeitet; umfasst einstufige Veröffentlichungen und laufende Preview-Veröffentlichungen. | Warten; Löschung ist möglich. |
preview | draft | Vorschau ist fertig bereitgestellt. | Veröffentlichen oder löschen. |
published | published | Datenversion für aktuelle Antworten. | Veröffentlichung aufheben. |
superseded | superseded | Ersetzt, unveröffentlicht oder Vorschau abgelaufen. | Löschen. |
failed | failed | Upload konnte nicht verarbeitet werden. | Löschen. |
deleting | deleting | Löschung läuft. | Keine Aktion. |
Die Liste enthält höchstens die 50 neuesten Releases, absteigend sortiert. Pro Organisation ist maximal ein Release gleichzeitig published; nach einem Unpublish keines. Versionen im Zustand deleting werden nur bei ?status=deleting angezeigt und verschwinden nach abgeschlossener Löschung aus allen Listen. (Referenz)
Ein Release außer Betrieb nehmen
Zwei bewusst getrennte Aufrufe entfernen Daten: unpublish nimmt das aktuelle veröffentlichte Release außer Betrieb; delete löscht Releases, die nicht veröffentlicht sind. Beide dürfen von Eigentümern und Administratoren in jedem Tarif aufgerufen werden, damit auch eine heruntergestufte Organisation ihre Daten entfernen kann. Beide benötigen weder Body noch Idempotency-Key und lassen sich sicher wiederholen.
Vorgehen in Kaleidr Studio
Jede Zeile der Releases-Liste in Data for AI Answers bietet die passende Aktion mit einer Bestätigungsabfrage. Für Eigentümer und Administratoren einer ehemaligen Enterprise-Organisation bleibt die Liste sichtbar, solange Releases vorhanden sind. Statt der Upload-Schritte erscheint „Uploading is part of the Enterprise plan.“, die Optionen Unpublish und Delete bleiben erhalten.
| Zeilenstatus | Aktion | Bestätigung | Danach sichtbar |
|---|---|---|---|
| Published | Unpublish | „Unpublish this release? Kaleidr AI stops answering from this data until you publish another release. This release cannot be published again.“ | „Unpublishing…“, danach „Unpublished. Kaleidr AI no longer answers from this data.“; Status wird Superseded. |
| Draft, Superseded, Failed | Delete | „Delete this release? This removes the release and everything made from it, and cannot be undone.“ | „Deleting…“, danach „Release deleted.“; Zeile verschwindet. |
| Processing | Keine |
Jede Bestätigung bietet die jeweilige Aktionsschaltfläche und Cancel. Delete wird für ein veröffentlichtes Release nicht angeboten. Beim entsprechenden API-Aufruf wird angezeigt: „This release is published. Unpublish it before you delete it.“ Siehe Releases-Liste.
Ein Release unveröffentlichen
| Feld | Beschreibung |
|---|---|
| Anfrage | POST /shared-api/datahub/releases/{release_id}/unpublish |
| Berechtigung | Eigentümer oder Administrator, jeder Tarif |
| Body | Keiner |
| Query | org_id, optional |
curl -X POST https://api.kaleidr.com/shared-api/datahub/releases/a81d77b0-…/unpublish \
-H "Authorization: Bearer $KALEIDR_ACCESS_TOKEN"
{ "release_id": "a81d77b0-…", "status": "superseded" }
Das Release ist außer Betrieb, sobald der Aufruf abgeschlossen ist. Daraus folgt:
- Ihre Organisation besitzt kein veröffentlichtes Release, bis ein neues veröffentlicht wird. Ein früheres Release kehrt nicht automatisch zurück. Antworten basieren wieder auf allgemeinem Wissen und weisen nicht darauf hin, dass Ihre Daten entfernt wurden.
- Dasselbe Release kann nicht erneut veröffentlicht werden. Laden Sie zum Wiederherstellen dieselbe Datei neu hoch und veröffentlichen Sie sie.
- Das Release verbleibt als
supersededin Ihrer Liste und kann gelöscht oder nach der Aufbewahrungsfrist automatisch entfernt werden.
| Status | detail | Bedeutung |
|---|---|---|
| 200 | Release wurde superseded. Wiederholte Aufrufe liefern ebenfalls 200, auch für bereits ersetzte Releases. superseded | |
| 403 | org_admin_required | Konto ist kein Eigentümer oder Administrator. |
| 404 | release_not_found | Release gehört nicht zur Organisation, existiert nicht oder wird gelöscht. |
| 409 | release_not_published | Release ist draft oder failed und war nie in Betrieb. |
Ein Release löschen
| Feld | Beschreibung |
|---|---|
| Anfrage | DELETE /shared-api/datahub/releases/{release_id} |
| Berechtigung | Eigentümer oder Administrator, jeder Tarif |
| Body | Keiner |
| Query | org_id, optional |
curl -X DELETE https://api.kaleidr.com/shared-api/datahub/releases/a81d77b0-… \
-H "Authorization: Bearer $KALEIDR_ACCESS_TOKEN"
HTTP/1.1 202 Accepted
{ "release_id": "a81d77b0-…", "status": "deleting", "dispatched": true }
Das Löschen entfernt das Release, die dafür hochgeladene Datei und alles, was Kaleidr daraus erstellt hat. Dieser Vorgang lässt sich nicht rückgängig machen.
- Ein veröffentlichtes Release muss zuerst unveröffentlicht werden. Direktes Löschen ergibt 409
release_is_published. Alle anderen Status können gelöscht werden: Vorschau, ersetzt, fehlgeschlagen oder noch in Verarbeitung. - Der Aufruf antwortet mit 202; die Löschung erfolgt kurz darauf. Sofort nach der Antwort steht das Release auf
deleting, fehlt in der Standardliste, kann nicht veröffentlicht werden und sein Ingest liefert 404ingest_not_found. Dies gilt auch für die Statusabfrage und den erneuten Verarbeitungsversuch. dispatchedmeldet, ob die Löschung durch diesen Aufruf gestartet wurde. Beifalsewird sie wenig später automatisch gestartet oder Sie können erneut aufrufen.- Wiederholungen sind sicher. Während der Löschung lautet die Antwort weiter 202. Nach Abschluss liefert der Aufruf 404
release_not_found; behandeln Sie diesen Fall als „bereits gelöscht“.
| Status | detail | Bedeutung |
|---|---|---|
| 202 | Das Release ist deleting; Wiederholungen liefern bis zum Abschluss 202. | |
| 403 | org_admin_required | Keine Eigentümer-/Administratorrolle. |
| 404 | release_not_found | Release nicht vorhanden, einschließlich bereits vollständig gelöschter Releases. |
| 409 | release_is_published | Release noch veröffentlicht; zuerst Unpublish. |
Zur Bestätigung der Löschung listen Sie Releases mit ?status=deleting. Eine leere Liste bedeutet, dass nichts mehr gelöscht wird.
Automatische Entfernung alter Releases
Nicht mehr aktuelle Releases müssen Sie nicht selbst löschen. Kaleidr entfernt sie automatisch auf dieselbe Weise wie der Delete-Aufruf:
| Release | Entfernung |
|---|---|
superseded: durch neue Veröffentlichung ersetzt oder unveröffentlicht | 30 Tage nach der Ersetzung oder dem Unpublish |
| Vorschau, die nie veröffentlicht wurde | Ablauf nach 14 Tagen, Löschung weitere 30 Tage später |
failed | 30 Tage nach Ende des letzten Verarbeitungsversuchs |
published | Nie, solange das Release veröffentlicht bleibt |
Was die Löschung nicht erfasst
Ein vollständig gelöschtes Release wird für keine später erstellte Antwort mehr verwendet. Ausgenommen von der Löschung bleiben zwischengespeicherte Antworten (für begrenzte Zeit), gespeicherte Chatprotokolle, Backups und Text, der bei der Datenverarbeitung bereits an einen Modellanbieter gesendet wurde. Siehe Grenzen der Löschung.
Grenzen
Vertraglich festgelegte Limits
Dateigrößen und Mengen eines Uploads werden in Ihrer Organisationsvereinbarung festgelegt. Die Plattform hat für jeden dieser Grenzwerte eine technische Obergrenze, die auch Ihre Organisationsvereinbarung nicht überschreiten kann.
| Limit | Enterprise | Bei Überschreitung |
|---|---|---|
Größe von artifact | Vertraglich festgelegt | 422 beim Upload |
| CSV-Zeilen ohne Kopfzeile | Vertraglich festgelegt | 422 beim Upload |
| Orte im JSON-Bundle | Vertraglich festgelegt | 422 beim Upload |
| Dokumente im JSON-Bundle | Vertraglich festgelegt | 422 beim Upload |
GET /shared-api/datahub/limitsliefert die für Ihre Organisation gültigen Limits.- Free und Pro können nichts hochladen und haben daher keine Upload-Kontingente; die Aufrufe liefern 403
vendor_data_not_on_plan. - Die Grenzen gelten je Organisation. Ein Publish ersetzt das vorherige Release vollständig, sodass die Limits für jeden Upload ebenso wie für die veröffentlichten Daten gelten.
Bei Überschreitung wird 422 mit einem Grund zurückgegeben, der Limit und Tarif nennt. In Beispielen steht <count> für die gesendete Anzahl und <limit> für Ihre vertragliche Grenze:
{ "detail": { "errors": ["<count> places exceed the limit of <limit> (enterprise plan)"] } }
Drei weitere Begründungen haben die Form <count> documents exceed the limit of <limit> (enterprise plan), csv has more than <limit> rows; the places limit is <limit> (enterprise plan) und artifact is <size> MB; the limit is <limit> MB (enterprise plan). Bei zu großen Dateien endet die Prüfung sofort, sodass nur dieser Grund zurückgegeben wird.
Feste Limits für alle Organisationen
| Limit | Wert | Überschreitung |
|---|---|---|
| Größe der gesamten Upload-Anfrage | 32 MiB | 413 request_body_too_large |
| Zimmertypen pro Upload | 10.000 | 422 bei JSON; fehlgeschlagener Ingest bei Mapping-Tabelle |
| Tarifpläne pro Upload | 10.000 | 422 bei JSON; fehlgeschlagener Ingest bei Mapping-Tabelle |
| Öffnungszeiten-Einträge im JSON-Bundle | 25.000 | 422 beim Upload |
| Zeilen für Übernachtungspreise und Verfügbarkeit zusammen pro Upload | 200.000 | Ingest schlägt fehl: daily facts: <count> rows exceed the cap of 200000 |
| Text aller Dokumente pro Upload zusammen | Höchstens etwa 600.000 Zeichen, bei vielen Dokumenten weniger | Ingest schlägt fehl: documents: chunk count exceeds the cap of 500 |
| JSON-Verschachtelung | Zu tief verschachteltes JSON wird abgelehnt | 422 |
mapping_spec | 64 KB | 422 |
filename | 200 Zeichen, Endung .csv oder .json | 422 |
| Gleichzeitige Uploads pro Organisation | 1 | 409 org_ingest_in_progress (bei Upload, Veröffentlichung und erneutem Verarbeiten) |
| Neue Uploads pro Organisation | 30 pro Stunde | 429 ingest_rate_limited |
csv_head für Vorschläge | 16.384 Zeichen | 422 |
| Vorschläge | 30 pro Konto und Stunde, jeweils kostenpflichtig in AI-Credits | 429; siehe Zwei 429-Arten |
| Versuche pro Ingest | 3 | 409 beim Re-Dispatch |
| Niemals veröffentlichte Vorschau | 14 Tage | 409 beim Publish |
| Nicht mehr aktuelles Release | 30 Tage | Automatische Löschung |
Die Grenze für den gesamten Request liegt über der Dateigrenze, weil die Datei als String in JSON übertragen wird und Escaping die Größe erhöht. Anfragen über 32 MiB werden vor dem Lesen mit 413 abgelehnt. Liegt nur die Datei über dem Organisationslimit, aber der Request unter 32 MiB, lautet die Antwort 422.
Größen- oder Mengenüberschreitungen ergeben 422 mit bis zu 200 Gründen. Für ein für alle Organisationen geltendes Zeilenlimit sieht ein Beispiel so aus:
{ "detail": { "errors": ["10001 room_types exceed the cap of 10000"] } }
Auch zu tief verschachteltes JSON führt zu einer solchen Antwort:
{ "detail": { "errors": ["upload is nested too deeply"] } }
Das CSV-Limit zählt alle Datenzeilen, unabhängig davon, was sie darstellen. Eine Tabelle mit einer Zeile pro Übernachtung erreicht es schnell. Größere Preis- und Verfügbarkeitsdaten sollten als JSON-Bundle übermittelt werden; dort werden Orte, Dokumente, Zimmertypen, Tarifpläne und Öffnungszeiten bereits beim Upload gezählt.
Feldgrenzen
Jedes Feld hat eine maximale Länge. Text wird in Zeichen gemessen. Freie JSON-Werte (Objekte oder Arrays) werden nach der JSON-Serialisierung in Bytes gemessen.
| Liste | Feld | Grenze |
|---|---|---|
| Alle Listen | ref, place_ref, room_type_ref, rate_plan_ref | 128 Zeichen |
places | name | 200 Zeichen |
places | category | 100 Zeichen |
places | timezone | 64 Zeichen |
places | overture_id (optional) | 128 Zeichen |
places | address | 2.048 Bytes als JSON |
places | schema_org (optionales Objekt) | 16.384 Bytes als JSON |
room_types | name | 200 Zeichen |
room_types | amenities (optionales Array), attributes (optionales Objekt) | Je 8.192 Bytes als JSON |
rate_plans | name | 200 Zeichen |
rate_plans | currency (optional) | 3 Zeichen |
rate_plans | cancellation_policy (optional) | 2.000 Zeichen |
rate_plans | board_basis (optional) | 100 Zeichen |
rate_plans | attributes (optionales Objekt) | 8.192 Bytes als JSON |
hours | note (optional) | 500 Zeichen |
documents | title | 300 Zeichen |
Wann eine Grenze geprüft wird, hängt vom Uploadformat ab:
- JSON-Bundle: Prüfung beim Upload; 422 nennt Zeile und Feld, etwa
places[3]: name is longer than 200 charactersoderroom_types[0]: amenities is larger than 8192 bytes as JSON. - Orts-CSV oder gemappte Tabelle: Prüfung während des Ingests; Fehler stehen im
error_report.errors-Feld des fehlgeschlagenen Auftrags. (failed)
Ein freier JSON-Wert mit NaN oder Infinity wird als <list>[<row>]: <field> holds a non-finite number gemeldet.
Ablauf von Vorschauen
Eine nicht veröffentlichte Vorschau wird 14 Tage nach erfolgreicher Bereitstellung stillgelegt und als superseded markiert. Sie bleibt vorübergehend auf der Releases-Liste, kann aber nicht mehr veröffentlicht werden. Der Publish-Aufruf ergibt 409 no_previewed_release_to_publish; laden Sie die Datei erneut hoch. Wie andere ersetzte Releases wird die Vorschau 30 Tage später automatisch gelöscht, kann aber vorher manuell gelöscht werden.
Hinweise zu den Feldern
timezone ist für jeden Ort erforderlich und beeinflusst die Antworten. Preise und Verfügbarkeit richten sich nach dem lokalen Kalendertag des Ortes. „Heute Nacht“ ist bei einem Hotel in Sydney ein anderes Datum als in London. Fehlt eine Spalte für Zeitzonen, verwenden Sie eine Konstante:
{ "timezone": { "const": "Australia/Sydney" } }
Wählen Sie die Zeitzone bewusst. Eine falsche Einstellung führt zu Antworten, die fast den ganzen Tag richtig erscheinen, aber um Mitternacht falsch sind. Fehlende oder ungültige IANA-Zonen werden als Fehler gemeldet.
Übergeben Sie Koordinaten, falls vorhanden. Orte mit lat und lng verwenden genau diese Werte. Bei Orten nur mit Adresse erfolgt eine Standortbestimmung; ein nicht ausreichend verlässlicher Treffer wird abgelehnt statt geraten, und die Zeile wird als Fehler gemeldet, damit Sie Koordinaten liefern. Eine falsch platzierte Markierung ist schlimmer als eine ungelöste Adresse.
Denselben Export mehrfach hochzuladen ist sicher. Bei Mapping-Tabellen werden Kennungen aus den Spalten unter ref_from abgeleitet. Derselbe Export erzeugt dieselben Kennungen. Ein neues Release ersetzt das vorherige, anstatt es zu ergänzen.
Jedes Release ist vollständig eigenständig. Es erbt nichts vom vorherigen Release. Fehlen im neuen Export Orte aus dem letzten Monat, verschwinden diese nach der Veröffentlichung aus den Antworten.
Senden Sie UTF-8-Text. ZIP-Dateien, komprimierte Dateien oder PDFs mit bloß geänderter Endung .csv oder .json werden abgelehnt.
Fehler
Außer bei Antworten mit mehreren Begründungen haben Uploadfehler die Form { "detail": "<code>" }.
| Status | detail | Bedeutung |
|---|---|---|
| 401 | Zugriffstoken fehlt, ist abgelaufen oder kein Zugriffstoken. | |
| 403 | org_admin_required | Konto hat keine Eigentümer-/Administratorrolle. |
| 403 | vendor_data_not_on_plan | Organisation ist nicht auf Enterprise. Upload, Publish und Re-Dispatch werden verweigert; Lesen, Unpublish und Delete nicht. |
| 404 | ingest_not_found | Ingest existiert nicht, oder sein Release wird gelöscht bzw. wurde gelöscht. |
| 404 | release_not_found | Release existiert nicht in der Organisation; gilt auch nach abgeschlossener Löschung. |
| 409 | release_not_published | Unpublish auf Draft oder Failed. |
| 409 | release_is_published | Delete auf Published; zuerst Unpublish. |
| 409 | ingest_conflict | Zwei Uploads mit demselben Idempotency-Key kollidierten; wiederholen. |
| 409 | ingest_is_not_a_preview | Ingest war keine Vorschau, oder Publish wurde bereits angefordert. |
| 409 | ingest_already_running | Ingest wird bereits verarbeitet. |
| 409 | no_previewed_release_to_publish | Vorschau fehlgeschlagen, noch nicht beendet oder abgelaufen. |
| 409 | publish_already_in_progress | Zwei Publish-Aufrufe überschnitten sich; einer läuft. |
| 409 | ingest_already_succeeded | Re-Dispatch auf abgeschlossenen Ingest. |
| 409 | ingest_attempts_exhausted | Drei Verarbeitungsversuche verbraucht. |
| 409 | org_ingest_in_progress | Ein anderer Organisations-Ingest läuft; auf Abschluss warten. |
| 413 | request_body_too_large | Uploadanfrage über 32 MiB; Publish-, Re-Dispatch- und Leseaufrufe maximal 1 MiB. |
| 422 | { "errors": [ … ] } | Datei oder Mapping überschreitet Grenzen, JSON ist zu tief verschachtelt oder CSV/JSON nicht lesbar. Die Gründe nennen ggf. Tarif und Limit. Referenz |
| 429 | ingest_rate_limited | 30 Uploads der Organisation in der letzten Stunde. |
| 422 | Validierungsfehlerliste | Pflichtfeld fehlt oder ist ungültig, z. B. kein Idempotency-Key, falsche Dateiendung oder unzulässiger source. |
| 422 | unknown_release_status | status-Filter ist keiner der fünf erlaubten Werte. |
Eine Datei über dem Organisationslimit führt zu 422 mit dem Grund unter errors. 413 bedeutet, dass die gesamte Anfrage zu groß ist; der Body lautet { "detail": "request_body_too_large" }.
Der Vorschlagsaufruf hat eigene Fehler unter Mapping vorschlagen. Konten ohne Uploadrecht erhalten 403 org_admin_required oder vendor_data_not_on_plan; bei überschrittenem Stundenlimit oder aufgebrauchten AI-Credits folgt 429.
Heute noch nicht verfügbar
- Inkrementelle Aktualisierungen. Kein Upsert, kein Löschen einzelner Datensätze und kein „Änderungen seit“-Aufruf. Ein Release ersetzt das vorherige vollständig und kann insgesamt unveröffentlicht oder gelöscht werden.
- Ältere Releases wieder veröffentlichen. Ein superseded oder unveröffentlichtes Release kann nicht erneut aktuell werden; laden Sie die Datei neu hoch.
- Gespeicherte Mappings. Jedes Mapping muss beim Upload übergeben werden; es lässt sich nicht als ID speichern und wiederverwenden.
- Konnektoren. Kaleidr ruft keine Daten aus Datenbanken, Buchungssystemen oder Tabellenservices ab.
- Multipart- oder Binär-Uploads. Dateien werden als Strings im JSON-Body übertragen.
Verwandte Seiten
- Antworten aus eigenen Daten: gesamter Ablauf, Tarife, Grenzen und Prüfung sowie die Datensatzfunktion für Karten in allen Tarifen.
- Authentifizierung und Scopes: Schlüssel mit Datenleserecht erstellen.
- Fehler: Fehlerkatalog der Plattform.