Zum Hauptinhalt springen

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​

VoraussetzungEinzelheiten
TarifEnterprise. 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.
RolleEigentümer oder Administrator der Organisation, sonst 403 org_admin_required.
GrenzenIn der Organisationsvereinbarung festgelegt; siehe Grenzen. GET /shared-api/datahub/limits liefert die eigenen Werte. Referenz
OberflächeData 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:

AufrufeRolleTarif
Mapping vorschlagen, hochladen, veröffentlichen, erneut verarbeitenEigentümer oder AdministratorEnterprise
Grenzen, Ingest-Status und Release-Liste lesenEigentümer oder AdministratorAlle
Veröffentlichung aufheben, Release löschenEigentümer oder AdministratorAlle

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.

FeldBeschreibung
AnfrageGET /shared-api/datahub/limits
BerechtigungEigentümer oder Administrator, jeder Tarif
QueryOptional 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"
}
FeldTypBedeutung
can_uploadbooleanOb diese Organisation hochladen darf.
planstring oder nullZugrunde liegender Tarif: free, pro oder enterprise.
limits.placesintegerOrte pro Upload; bei CSV die Datenzeilen.
limits.documentsintegerDokumente pro Upload.
limits.artifact_mbintegerMaximale Dateigröße in MiB.
reasonstring oder nullvendor_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.

StatusBedeutung
200Für Eigentümer und Administratoren in allen Tarifen. Unter Enterprise steht can_upload: false, die Anfrage wird nicht verweigert.
401Zugriffstoken fehlt, ist abgelaufen oder hat den falschen Typ.
403 org_admin_requiredDas 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_… oder kld_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 DatenFormatInhalt
Ortsliste.csv mit festen Spaltennamen, ohne MappingOrte
Tabellenexport mit einer Zeile pro Nacht, Zimmer oder Tarif.csv mit mapping_specOrte, Zimmertypen, Tarifpläne, Tagespreise, Verfügbarkeit
Vollständige strukturierte Daten.json-BundleAlle genannten Daten plus Öffnungszeiten und Dokumente

Jeder Upload muss mindestens einen Ort enthalten.

CSV mit Orten​

Die Kopfzeile verwendet diese Spaltennamen:

SpalteErforderlichHinweise
nameJaEine Zeile ohne Namen führt zu einem Uploadfehler samt Zeilennummer.
timezoneJaEine IANA-Zone wie Europe/London.
lat, lngEine der PositionsvariantenKoordinaten werden unverändert verwendet.
addressEine der PositionsvariantenWird zur Standortbestimmung genutzt, falls lat und lng fehlen.
categoryNeinKurze Kategorie wie hotel oder restaurant.
refNeinEigene 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:

TeilBedeutung
Abschnitteplaces (erforderlich), room_types, rate_plans, daily_rates, daily_inventory. Verwenden Sie nur Abschnitte, für die Daten vorliegen.
ref_fromSpalten zur Identifizierung. Zeilen mit denselben Werten sind derselbe Ort, Zimmertyp oder Tarifplan.
fieldsJedes 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.

AbschnittZuordnungsfähige FelderKonstante zulässig
placesname, address, timezone, category, lat, lng, overture_idtimezone, category
room_typesnamename
rate_plansname, currency, cancellation_policy, board_basisname, currency
daily_ratesstay_date (ISO-Datum), price_amount (nichtnegative Zahl), price_currency (drei Buchstaben)price_currency
daily_inventorystay_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." }
]
}
ListePflichtfelderHinweise
placesname, timezone und entweder lat mit lng oder addressref muss eindeutig sein; mindestens ein Ort.
room_types, rate_plansplace_ref, nameref muss innerhalb der jeweiligen Liste eindeutig sein.
daily_ratesplace_ref, room_type_ref, rate_plan_ref, stay_date, price_amount, price_currency
daily_inventoryplace_ref, room_type_ref, stay_date, units_available
hoursplace_ref, sowie weekday oder valid_fromweekday von 0 bis 6, Montag = 0. opens und closes sind Uhrzeiten.
documentstitle, textNur direkt enthaltener Text.

Optional sind weitere Felder zulässig, jeweils mit eigener Größenbegrenzung; siehe Feldgrenzen.

Hinweise zu Dokumenten:

  • Ein Dokument besteht aus title und dem enthaltenen text. Hinterlegte Speicherorte oder Schlüssel werden ignoriert; ein Dokument darf nicht auf eine Datei verweisen.
  • Die optionale Angabe mime beschreibt das Textformat. Erlaubt sind text/plain, text/markdown und text/html; alle anderen Werte werden als text/plain gespeichert.

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.

FeldBeschreibung
AnfragePOST /inference-api/vendor/mapping/propose
BerechtigungEigentümer oder Administrator einer Enterprise-Organisation.
Body{ "csv_head": "<the first characters of your file>" }
Grenzecsv_head zwischen 1 und 16.384 Zeichen; höchstens 30 Vorschläge pro Konto und Stunde.
KostenJeder 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_result meldet die Anzahl erzeugter Einträge pro Abschnitt. So erkennen Sie noch vor dem Upload ein scheinbar korrektes Mapping ohne Ergebnisse.
  • errors darf 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_head nicht 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.
StatusBedeutung
403 org_admin_requiredSie sind kein Eigentümer oder Administrator einer Organisation.
403 vendor_data_not_on_planSie haben eine Verwaltungsrolle, aber keine Enterprise-Organisation.
422csv_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 unavailableVorschlag 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:

MerkmalRatenbegrenzungAI-Credits erschöpft
Body{ "detail": "at most 30 mapping proposals per hour" }Standard-Kontingentantwort
ErkennungKein error-Feld, detail enthält den angegebenen Satz."error": "quota_exceeded" plus limit, used, remaining, reset_at.
MaßnahmeWarten; 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​

FeldBeschreibung
AnfragePOST /shared-api/datahub/ingests
BerechtigungEigentümer oder Administrator, Enterprise
HeaderIdempotency-Key, erforderlich, 8–128 Zeichen
Body-FeldTypStandardBedeutung
filenameString bis 200 ZeichenPflichtMuss auf .csv oder .json enden; die Endung wählt den Parser.
artifactStringPflichtDer 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_specObjekt bis 64 KBKeinesZuordnung einer CSV-Tabelle; bei Orts-CSV oder JSON-Bundle weglassen.
previewbooleanfalsetrue stellt zur Kontrolle bereit; false veröffentlicht nach Verarbeitung.
org_idUUIDPrimäre OrganisationZielorganisation.
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:

StatusdetailBedeutungMaßnahme
409org_ingest_in_progressEin anderer Organisations-Ingest steht auf running.Status abfragen, bis er succeeded oder failed erreicht, dann mit demselben Idempotency-Key erneut anfragen.
429ingest_rate_limitedIn einer Stunde wurden 30 Ingests erzeugt; Vorschauen zählen.Warten; das Mapping lieber über den Vorschlagsaufruf überprüfen als wiederholt bereitstellen.
413request_body_too_largeDie 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​

FeldBeschreibung
AnfrageGET /shared-api/datahub/ingests/{ingest_id}
BerechtigungEigentü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 succeeded nennt row_counts die verarbeiteten Elemente je Datenart. Vergleichen Sie die Zahlen vor dem Veröffentlichen mit Ihren Erwartungen.
  • Bei failed enthält error_report.errors Gründe je fehlerhafter Zeile. Höchstens 200 Einträge werden angezeigt; error_report.error_count ist 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​

FeldBeschreibung
AnfragePOST /shared-api/datahub/ingests/{ingest_id}/publish
BerechtigungEigentümer oder Administrator, Enterprise
BodyKeiner
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​

FeldBeschreibung
AnfragePOST /shared-api/datahub/ingests/{ingest_id}/dispatch
BerechtigungEigentü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)

StatusBedeutung
409 ingest_already_succeededKeine Aktion nötig.
409 ingest_already_runningDer Auftrag wird bereits verarbeitet.
409 ingest_attempts_exhaustedDrei Versuche sind verbraucht; mit neuem Idempotency-Key hochladen.
409 org_ingest_in_progressEin anderer Auftrag der Organisation läuft; warten und erneut aufrufen.
404 ingest_not_foundKein 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​

FeldBeschreibung
AnfrageGET /shared-api/datahub/releases
BerechtigungEigentümer oder Administrator, alle Tarife
QueryOptional 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-…"
}
]
FeldTypBedeutung
idUUIDRelease-ID für Unpublish und Delete.
statusstringdraft, published, superseded, failed oder deleting.
published_atZeitstempel oder nullZeitpunkt der Veröffentlichung.
superseded_atZeitstempel oder nullZeitpunkt der Ersetzung, Unveröffentlichung oder des Vorschauablaufs.
created_atZeitstempelAnnahmezeitpunkt des Uploads.
statestringDer aktuelle Aktionsstatus des Releases, siehe Tabelle.
ingest_idUUID oder nullZugehö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)

statestatusBedeutungErlaubte Aktion
processingdraftUpload wartet oder wird verarbeitet; umfasst einstufige Veröffentlichungen und laufende Preview-Veröffentlichungen.Warten; Löschung ist möglich.
previewdraftVorschau ist fertig bereitgestellt.Veröffentlichen oder löschen.
publishedpublishedDatenversion für aktuelle Antworten.Veröffentlichung aufheben.
supersededsupersededErsetzt, unveröffentlicht oder Vorschau abgelaufen.Löschen.
failedfailedUpload konnte nicht verarbeitet werden.Löschen.
deletingdeletingLö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.

ZeilenstatusAktionBestätigungDanach sichtbar
PublishedUnpublish„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, FailedDelete„Delete this release? This removes the release and everything made from it, and cannot be undone.“„Deleting…“, danach „Release deleted.“; Zeile verschwindet.
ProcessingKeine

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​

FeldBeschreibung
AnfragePOST /shared-api/datahub/releases/{release_id}/unpublish
BerechtigungEigentümer oder Administrator, jeder Tarif
BodyKeiner
Queryorg_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 superseded in Ihrer Liste und kann gelöscht oder nach der Aufbewahrungsfrist automatisch entfernt werden.
StatusdetailBedeutung
200Release wurde superseded. Wiederholte Aufrufe liefern ebenfalls 200, auch für bereits ersetzte Releases. superseded
403org_admin_requiredKonto ist kein Eigentümer oder Administrator.
404release_not_foundRelease gehört nicht zur Organisation, existiert nicht oder wird gelöscht.
409release_not_publishedRelease ist draft oder failed und war nie in Betrieb.

Ein Release löschen​

FeldBeschreibung
AnfrageDELETE /shared-api/datahub/releases/{release_id}
BerechtigungEigentümer oder Administrator, jeder Tarif
BodyKeiner
Queryorg_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 404 ingest_not_found. Dies gilt auch für die Statusabfrage und den erneuten Verarbeitungsversuch.
  • dispatched meldet, ob die Löschung durch diesen Aufruf gestartet wurde. Bei false wird 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“.
StatusdetailBedeutung
202Das Release ist deleting; Wiederholungen liefern bis zum Abschluss 202.
403org_admin_requiredKeine Eigentümer-/Administratorrolle.
404release_not_foundRelease nicht vorhanden, einschließlich bereits vollständig gelöschter Releases.
409release_is_publishedRelease 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:

ReleaseEntfernung
superseded: durch neue Veröffentlichung ersetzt oder unveröffentlicht30 Tage nach der Ersetzung oder dem Unpublish
Vorschau, die nie veröffentlicht wurdeAblauf nach 14 Tagen, Löschung weitere 30 Tage später
failed30 Tage nach Ende des letzten Verarbeitungsversuchs
publishedNie, 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.

LimitEnterpriseBei Überschreitung
Größe von artifactVertraglich festgelegt422 beim Upload
CSV-Zeilen ohne KopfzeileVertraglich festgelegt422 beim Upload
Orte im JSON-BundleVertraglich festgelegt422 beim Upload
Dokumente im JSON-BundleVertraglich festgelegt422 beim Upload
  • GET /shared-api/datahub/limits liefert 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​

LimitWertÜberschreitung
Größe der gesamten Upload-Anfrage32 MiB413 request_body_too_large
Zimmertypen pro Upload10.000422 bei JSON; fehlgeschlagener Ingest bei Mapping-Tabelle
Tarifpläne pro Upload10.000422 bei JSON; fehlgeschlagener Ingest bei Mapping-Tabelle
Öffnungszeiten-Einträge im JSON-Bundle25.000422 beim Upload
Zeilen für Übernachtungspreise und Verfügbarkeit zusammen pro Upload200.000Ingest schlägt fehl: daily facts: <count> rows exceed the cap of 200000
Text aller Dokumente pro Upload zusammenHöchstens etwa 600.000 Zeichen, bei vielen Dokumenten wenigerIngest schlägt fehl: documents: chunk count exceeds the cap of 500
JSON-VerschachtelungZu tief verschachteltes JSON wird abgelehnt422
mapping_spec64 KB422
filename200 Zeichen, Endung .csv oder .json422
Gleichzeitige Uploads pro Organisation1409 org_ingest_in_progress (bei Upload, Veröffentlichung und erneutem Verarbeiten)
Neue Uploads pro Organisation30 pro Stunde429 ingest_rate_limited
csv_head für Vorschläge16.384 Zeichen422
Vorschläge30 pro Konto und Stunde, jeweils kostenpflichtig in AI-Credits429; siehe Zwei 429-Arten
Versuche pro Ingest3409 beim Re-Dispatch
Niemals veröffentlichte Vorschau14 Tage409 beim Publish
Nicht mehr aktuelles Release30 TageAutomatische 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.

ListeFeldGrenze
Alle Listenref, place_ref, room_type_ref, rate_plan_ref128 Zeichen
placesname200 Zeichen
placescategory100 Zeichen
placestimezone64 Zeichen
placesoverture_id (optional)128 Zeichen
placesaddress2.048 Bytes als JSON
placesschema_org (optionales Objekt)16.384 Bytes als JSON
room_typesname200 Zeichen
room_typesamenities (optionales Array), attributes (optionales Objekt)Je 8.192 Bytes als JSON
rate_plansname200 Zeichen
rate_planscurrency (optional)3 Zeichen
rate_planscancellation_policy (optional)2.000 Zeichen
rate_plansboard_basis (optional)100 Zeichen
rate_plansattributes (optionales Objekt)8.192 Bytes als JSON
hoursnote (optional)500 Zeichen
documentstitle300 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 characters oder room_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>" }.

StatusdetailBedeutung
401Zugriffstoken fehlt, ist abgelaufen oder kein Zugriffstoken.
403org_admin_requiredKonto hat keine Eigentümer-/Administratorrolle.
403vendor_data_not_on_planOrganisation ist nicht auf Enterprise. Upload, Publish und Re-Dispatch werden verweigert; Lesen, Unpublish und Delete nicht.
404ingest_not_foundIngest existiert nicht, oder sein Release wird gelöscht bzw. wurde gelöscht.
404release_not_foundRelease existiert nicht in der Organisation; gilt auch nach abgeschlossener Löschung.
409release_not_publishedUnpublish auf Draft oder Failed.
409release_is_publishedDelete auf Published; zuerst Unpublish.
409ingest_conflictZwei Uploads mit demselben Idempotency-Key kollidierten; wiederholen.
409ingest_is_not_a_previewIngest war keine Vorschau, oder Publish wurde bereits angefordert.
409ingest_already_runningIngest wird bereits verarbeitet.
409no_previewed_release_to_publishVorschau fehlgeschlagen, noch nicht beendet oder abgelaufen.
409publish_already_in_progressZwei Publish-Aufrufe überschnitten sich; einer läuft.
409ingest_already_succeededRe-Dispatch auf abgeschlossenen Ingest.
409ingest_attempts_exhaustedDrei Verarbeitungsversuche verbraucht.
409org_ingest_in_progressEin anderer Organisations-Ingest läuft; auf Abschluss warten.
413request_body_too_largeUploadanfrage ü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
429ingest_rate_limited30 Uploads der Organisation in der letzten Stunde.
422ValidierungsfehlerlistePflichtfeld fehlt oder ist ungültig, z. B. kein Idempotency-Key, falsche Dateiendung oder unzulässiger source.
422unknown_release_statusstatus-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​