Objekte
Der Bestand, und Ihr eigener Anteil daran. Lesende Endpunkte umfassen alles, was wir halten; schreibende berühren ausschließlich Datensätze, die Ihre Organisation veröffentlicht hat.
/v1/api/propertiesproperties:readObjekte auflisten
Den Bestand mit Filtern seitenweise durchgehen.
Der lesende Arbeitspferd-Endpunkt. Filter werden mit UND verknüpft. Was weggelassen wird, ist nicht eingeschränkt, ein ungefilterter Aufruf liefert also den gesamten Bestand in Cursor-Reihenfolge.
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
city | string | Stadt, auf die eingeschränkt wird, so wie sie in der Adresse eines Objekts steht. Beispiel: Berlin |
district | string | Stadtteil innerhalb der Stadt. Beispiel: Kreuzberg |
postal_code | string | Postleitzahl, auf die eingeschränkt wird. Beispiel: 10999 |
type | enum | Art der Immobilie. apartment | house | studio | villa | penthouse | loft | townhouse | other Beispiel: apartment |
transaction_type | enum | Auf Kauf oder Miete einschränken. sale | rent Beispiel: sale |
status | enum | Angebotsstatus. Weglassen für alle Status statt nur der aktiven. active | archived | sold | flagged Beispiel: active |
external_id | string | Ihre eigene Kennung für einen Datensatz, um zu finden, was ein Import angelegt hat. Beispiel: OBJ-10041 |
min_price | number | Einschließende Untergrenze des Angebotspreises. Beispiel: 250000 |
max_price | number | Einschließende Obergrenze des Angebotspreises. Beispiel: 750000 |
min_living_area | number | Einschließende Untergrenze der Wohnfläche in Quadratmetern. Beispiel: 60 |
min_bedrooms | integer | Einschließende Untergrenze der Schlafzimmerzahl. Beispiel: 2 |
limit | integer | Datensätze je Seite. Vorgabe: 50Beispiel: 50 |
cursor | string | Undurchsichtiger Zeiger aus der vorherigen Antwort. Für die erste Seite weglassen. Cursor sind über Einfügungen hinweg stabil, das Blättern überspringt oder wiederholt also nie einen Datensatz, wie es ein Offset tut. Beispiel: eyJpZCI6InByb3BfMWI3N2UwYTRmMiJ9 |
sort | string | Feld, nach dem sortiert wird. Mit einem Minus davor absteigend. Beispiel: -created_at |
expand | enum | Verwandte Datensätze, die eingebettet statt gesondert geholt werden. images | price_history | market | translations Beispiel: images |
language | string | In dieser Sprache antworten, sofern das Objekt sie führt, als ISO-639-1-Code. Ein Objekt, das die Sprache nicht führt, behält seinen eigenen Text, statt in einer anderen beantwortet zu werden, und die Antwort nennt die tatsächlich gelieferte Sprache. Gefüllt wird dies von Feeds, die mehrere Sprachen mitliefern. Beispiel: es |
Antwort
{
"data": [
{ "id": "prop_8f2a41c9d0", "title": "Top-floor apartment…", "price": 42900000 },
{ "id": "prop_1b77e0a4f2", "title": "Garden flat…", "price": 38500000 }
],
"meta": {
"has_more": true,
"next_cursor": "eyJpZCI6InByb3BfMWI3N2UwYTRmMiJ9",
"limit": 50
}
}https://api.skautik.com/v1/api/properties
GET /v1/api/properties?city=Berlin&district=Kreuzberg&postal_code=10999 HTTP/1.1
Host: api.skautik.com
Authorization: Bearer sk_live_…/v1/api/properties/searchproperties:readObjekte suchen
Semantische und geografische Suche, die für eine Query-Zeichenkette zu komplex ist.
Nimmt eine Anfrage in natürlicher Sprache, ein gezeichnetes Polygon oder beides. Ergebnisse kommen nach Relevanz sortiert zurück und nicht nach einer sortierbaren Spalte, dieser Endpunkt ignoriert den Parameter sort also. Er ist ein POST, weil ein Polygon nicht in eine URL gehört, nicht weil er etwas ändert.
Felder im Rumpf
| Name | Typ | Beschreibung |
|---|---|---|
query | string | Beschreibung des Gesuchten in einfacher Sprache. Beispiel: "quiet two bedroom near a park, needs a home office" |
polygon | array | Geschlossener Ring aus [Längengrad, Breitengrad]-Paaren, in GeoJSON-Reihenfolge. Beispiel: [[13.3702, 52.4812], [13.4791, 52.4812], [13.4791, 52.5401], [13.3702, 52.5401], [13.3702, 52.4812]] |
bounds | object | Rechteck mit sw_lat, sw_lng, ne_lat, ne_lng. Schließt polygon aus. Beispiel: {"north": 52.5401, "south": 52.4812, "east": 13.4791, "west": 13.3702} |
filters | object | Dieselben Schlüssel, die der Listen-Endpunkt als Query-Parameter annimmt. Beispiel: {"property_type": "apartment", "price_max": 60000000} |
limit | integer | Zurückzugebende Ergebnisse, 1 bis 200. Vorgabe: 50Beispiel: 50 |
Rumpf der Anfrage
{
"query": "quiet two bedroom near a park, needs a home office",
"filters": {
"market": "berlin-de",
"transaction_type": "sale",
"price_max": 50000000
},
"limit": 20
}Antwort
{
"data": [
{
"id": "prop_8f2a41c9d0",
"title": "Top-floor apartment…",
"relevance": 0.87,
"matched_on": ["quiet street", "park within 300m", "study alcove"]
}
],
"meta": { "has_more": false, "limit": 20 }
}https://api.skautik.com/v1/api/properties/search
POST /v1/api/properties/search HTTP/1.1
Host: api.skautik.com
Authorization: Bearer sk_live_…
Content-Type: application/json
{
"query": "quiet two bedroom near a park, needs a home office",
"filters": {
"market": "berlin-de",
"transaction_type": "sale",
"price_max": 50000000
},
"limit": 20
}/v1/api/properties/{property_id}properties:readEin Objekt abrufen
Ein Objekt mit dem vollständigen Merkmalssatz.
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
property_iderforderlich | string | Kennung, die jeder Sammlungs-Endpunkt zurückgibt. Beispiel: prop_8f2a41c9d0 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
expand | enum | Verwandte Datensätze, die eingebettet statt gesondert geholt werden. images | price_history | market | translations Beispiel: images |
language | string | In dieser Sprache antworten, sofern das Objekt sie führt, als ISO-639-1-Code. Ein Objekt, das die Sprache nicht führt, behält seinen eigenen Text, statt in einer anderen beantwortet zu werden, und die Antwort nennt die tatsächlich gelieferte Sprache. Gefüllt wird dies von Feeds, die mehrere Sprachen mitliefern. Beispiel: es |
Antwort
{
"data": {
"id": "prop_8f2a41c9d0",
"title": "Top-floor apartment with a south-facing balcony",
"property_type": "apartment",
"transaction_type": "sale",
"price": 42900000,
"currency": "EUR",
"price_period": null,
"price_per_area": 579700,
"bedrooms": 2,
"bathrooms": 1,
"rooms": 3,
"living_area": 74,
"floor": 4,
"total_floors": 4,
"year_built": 1908,
"energy_label": "C",
"address": {
"street": "Oranienstrasse",
"postal_code": "10999",
"district": "Kreuzberg",
"city": "Berlin",
"country": "DE"
},
"location": {
"latitude": 52.4993,
"longitude": 13.4184,
"precision": "street"
},
"status": "active",
"listed_at": "2026-07-28T09:12:04Z",
"last_verified_at": "2026-08-11T04:00:00Z",
"updated_at": "2026-08-11T04:00:00Z"
}
}Bemerkenswerte Antworten
- 404
- Unbekannte Kennung, oder ein Datensatz, den Ihr Schlüssel nicht sehen darf. Als Abwesenheit behandeln.
https://api.skautik.com/v1/api/properties/{property_id}
GET /v1/api/properties/prop_8f2a41c9d0?expand=images&language=es HTTP/1.1
Host: api.skautik.com
Authorization: Bearer sk_live_…/v1/api/properties/{property_id}/price-historyproperties:readPreisverlauf
Jeder Angebotspreis, den wir während der Beobachtung gesehen haben.
Das sind inserierte Preise, keine erzielten. Eine Immobilie kann durchaus für etwas ganz anderes verkauft worden sein als ihr letzter Angebotspreis.
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
property_iderforderlich | string | Objektkennung. Beispiel: prop_8f2a41c9d0 |
Antwort
{
"data": [
{ "price": 44900000, "currency": "EUR", "observed_at": "2026-07-28T09:12:04Z" },
{ "price": 42900000, "currency": "EUR", "observed_at": "2026-08-09T06:31:11Z" }
]
}https://api.skautik.com/v1/api/properties/{property_id}/price-history
GET /v1/api/properties/prop_8f2a41c9d0/price-history HTTP/1.1
Host: api.skautik.com
Authorization: Bearer sk_live_…/v1/api/properties/{property_id}/similarGrowth and aboveproperties:readÄhnliche Objekte
Vergleichbare Datensätze, zur Einordnung oder als Stütze einer Bewertung.
Die Ähnlichkeit verbindet Lage, Größe, Art und Zustand. Sie ist eine Hilfe und kein Gutachten, und in Gegenden mit wenig Angebot werden Vergleichsobjekte schnell dünn.
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
property_iderforderlich | string | Objekt, mit dem verglichen wird. Beispiel: prop_8f2a41c9d0 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
limit | integer | Zurückzugebende Vergleichsobjekte, 1 bis 50. Beispiel: 10 |
https://api.skautik.com/v1/api/properties/{property_id}/similar
GET /v1/api/properties/prop_8f2a41c9d0/similar?limit=10 HTTP/1.1
Host: api.skautik.com
Authorization: Bearer sk_live_…/v1/api/propertiesproperties:writeEin Objekt anlegen
Einen Datensatz aus Ihrem eigenen Bestand veröffentlichen.
Senden Sie einen Idempotency-Key, damit ein wiederholter Aufruf kein doppeltes Angebot anlegen kann. So angelegte Datensätze gehören Ihrer Organisation und sind die einzigen, die Ihr Schlüssel ändern darf.
Felder im Rumpf
| Name | Typ | Beschreibung |
|---|---|---|
external_id | string | Ihre Kennung für dieses Objekt. Optional, aber setzen Sie sie, falls der Datensatz später über einen Import ankommen könnte: Ohne sie hat der Import nichts zum Abgleichen und legt ein Duplikat an. Beispiel: AG-4471-0812 |
titleerforderlich | string | Überschrift des Angebots. Beispiel: Top-floor apartment with a south-facing balcony |
property_typeerforderlich | enum | Eine der unterstützten Objektarten. Beispiel: apartment |
transaction_typeerforderlich | enum | sale oder rent. Beispiel: sale |
priceerforderlich | integer | Betrag in kleinster Währungseinheit. Beispiel: 48900000 |
currencyerforderlich | string | ISO-4217-Code. Beispiel: EUR |
addresserforderlich | object | Mindestens Stadt und Land; mehr verbessert die Genauigkeit der Verortung. Beispiel: {"street": "Oranienstrasse 12", "postal_code": "10999", "city": "Berlin", "country": "DE"} |
Header
| Name | Typ | Beschreibung |
|---|---|---|
Idempotency-Key | string | Eindeutig je logischer Anlage. Denselben Schlüssel erneut zu senden liefert das ursprüngliche Ergebnis, statt einen zweiten Datensatz anzulegen. Beispiel: a2f1c7e4-… |
Rumpf der Anfrage
{
"title": "Top-floor apartment with a south-facing balcony",
"property_type": "apartment",
"transaction_type": "sale",
"price": 42900000,
"currency": "EUR",
"living_area": 74,
"bedrooms": 2,
"address": {
"street": "Oranienstrasse",
"postal_code": "10999",
"city": "Berlin",
"country": "DE"
}
}Bemerkenswerte Antworten
- 201
- Angelegt. Der Location-Header trägt die URL der neuen Ressource.
- 409
- Ein Idempotency-Key wurde mit anderem Rumpf wiederverwendet.
- 422
- Der Rumpf ließ sich lesen, scheiterte aber an der Prüfung. Siehe das Feld errors.
https://api.skautik.com/v1/api/properties
POST /v1/api/properties HTTP/1.1
Host: api.skautik.com
Authorization: Bearer sk_live_…
Content-Type: application/json
{
"title": "Top-floor apartment with a south-facing balcony",
"property_type": "apartment",
"transaction_type": "sale",
"price": 42900000,
"currency": "EUR",
"living_area": 74,
"bedrooms": 2,
"address": {
"street": "Oranienstrasse",
"postal_code": "10999",
"city": "Berlin",
"country": "DE"
}
}/v1/api/properties/{property_id}properties:writeEin Objekt ändern
Felder an einem von Ihnen veröffentlichten Datensatz ändern.
Eine Teiländerung: Senden Sie nur, was sich ändert. Senden Sie If-Match mit dem ETag Ihres letzten Lesevorgangs, um eine gleichzeitige Bearbeitung nicht zu überschreiben. Ein Datensatz, der einer Importquelle gehört, wird hier abgelehnt, weil der nächste Lauf zurücknehmen würde, was Sie geschrieben haben: Ändern Sie ihn stattdessen im System, das den Import speist.
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
property_iderforderlich | string | Zu änderndes Objekt. Beispiel: prop_8f2a41c9d0 |
Header
| Name | Typ | Beschreibung |
|---|---|---|
If-Match | string | ETag aus Ihrem letzten Lesevorgang. Wird mit 412 abgelehnt, wenn der Datensatz weitergezogen ist. Beispiel: "3f8a2c1d9b" |
Rumpf der Anfrage
{
"title": "Top-floor apartment with a south-facing balcony and new windows",
"listing": {
"price": 419000,
"status": "active"
}
}Bemerkenswerte Antworten
- 403
- Der Datensatz existiert, aber Ihre Organisation hat ihn nicht veröffentlicht.
- 409
- managed_by_import. Der Datensatz gehört einer Importquelle, die dafür maßgeblich ist. Der Rumpf nennt die Quelle.
- 412
- If-Match passte nicht. Erneut lesen und Ihre Änderung erneut anwenden.
https://api.skautik.com/v1/api/properties/{property_id}
PATCH /v1/api/properties/prop_8f2a41c9d0 HTTP/1.1
Host: api.skautik.com
Authorization: Bearer sk_live_…
Content-Type: application/json
{
"title": "Top-floor apartment with a south-facing balcony and new windows",
"listing": {
"price": 419000,
"status": "active"
}
}/v1/api/properties/{property_id}properties:writeEin Objekt zurückziehen
Einen Ihrer Datensätze vom Markt nehmen.
Zurückziehen ist kein Löschen. Der Datensatz wechselt auf withdrawn, verschwindet aus der Suche und behält seinen Preisverlauf, damit frühere Auswertungen verständlich bleiben. Ein Datensatz, der einer Importquelle gehört, wird abgelehnt, weil der nächste Lauf ihn sofort zurückbrächte: Ziehen Sie ihn stattdessen an der Quelle zurück.
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
property_iderforderlich | string | Zurückzuziehendes Objekt. Beispiel: prop_8f2a41c9d0 |
Bemerkenswerte Antworten
- 204
- Zurückgezogen. Kein Rumpf.
- 409
- managed_by_import. Ziehen Sie es an der Quelle zurück oder löschen Sie zuerst die Quelle.
https://api.skautik.com/v1/api/properties/{property_id}
DELETE /v1/api/properties/prop_8f2a41c9d0 HTTP/1.1
Host: api.skautik.com
Authorization: Bearer sk_live_…/v1/api/properties/{property_id}/imagesproperties:readBilder auflisten
Bilddatensätze zu einem Objekt, in Anzeigereihenfolge.
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
property_iderforderlich | string | Objektkennung. Beispiel: prop_8f2a41c9d0 |
https://api.skautik.com/v1/api/properties/{property_id}/images
GET /v1/api/properties/prop_8f2a41c9d0/images HTTP/1.1
Host: api.skautik.com
Authorization: Bearer sk_live_…/v1/api/properties/{property_id}/imagesimages:writeEin Bild hochladen
Ein Bild an einen von Ihnen veröffentlichten Datensatz hängen.
Multipart-Upload. JPEG, PNG oder WebP bis 12 MB. Laden Sie nur Bilder hoch, an denen Sie die Rechte halten: Immobilienfotografie ist meist an einen Makler lizenziert und nicht dessen Eigentum.
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
property_iderforderlich | string | Objekt, an das gehängt wird. Beispiel: prop_8f2a41c9d0 |
Query-Parameter
| Name | Typ | Beschreibung |
|---|---|---|
room_type | string | Was das Foto zeigt, dient dem Gruppieren der Bilder und der Wahl einer Vorlage fürs Staging. Beispiel: living_room |
primary | boolean | true übergeben, um dies zum Hauptbild zu machen, was das bisherige zurückstuft. Beispiel: true |
Felder im Rumpf
| Name | Typ | Beschreibung |
|---|---|---|
fileerforderlich | binary | Bilddaten. Beispiel: listings.csv |
position | integer | Anzeigereihenfolge. Das Bild an Position 0 ist das Hauptbild. Beispiel: 1 |
Bemerkenswerte Antworten
- 413
- Die Datei überschreitet die Größenbeschränkung.
- 415
- Nicht unterstütztes Bildformat.
https://api.skautik.com/v1/api/properties/{property_id}/images
POST /v1/api/properties/prop_8f2a41c9d0/images?room_type=living_room&primary=true HTTP/1.1
Host: api.skautik.com
Authorization: Bearer sk_live_…
Content-Type: application/json
{
"file": "listings.csv",
"position": 1
}/v1/api/properties/{property_id}/images/{image_id}images:writeEin Bild löschen
Ein Bild von einem von Ihnen veröffentlichten Datensatz entfernen.
Pfadparameter
| Name | Typ | Beschreibung |
|---|---|---|
property_iderforderlich | string | Objektkennung. Beispiel: prop_8f2a41c9d0 |
image_iderforderlich | string | Bildkennung. Beispiel: img_2b7d4f1908 |
https://api.skautik.com/v1/api/properties/{property_id}/images/{image_id}
DELETE /v1/api/properties/prop_8f2a41c9d0/images/img_2b7d4f1908 HTTP/1.1
Host: api.skautik.com
Authorization: Bearer sk_live_…