Importazioni
Porta dentro il patrimonio dal sistema che già lo contiene. Un'importazione una tantum risolve una migrazione; una fonte di importazione tiene allineati un CRM e Skautik a tempo indeterminato.
/v1/api/importsimports:writeAvviare un'importazione
Carica un file, oppure indicaci dov'è, e avvia l'elaborazione.
Accetta un caricamento multipart o un URL che recuperiamo noi. La validazione viene per prima e l'intero file viene rifiutato se non è analizzabile; le singole schede che falliscono vengono segnalate senza fermare le altre, a meno che tu non chieda il tutto o niente.
Parametri di query
| Nome | Tipo | Descrizione |
|---|---|---|
formatobbligatorio | enum | Formato del file inviato. blm | csv | json | kyero | openimmo esempio: csv |
mode | enum | La modalità incrementale aggiorna ciò che il file contiene e lascia stare il resto. Una sincronizzazione completa ritira anche tutto ciò che vi manca, ed è per questo che non è la modalità predefinita. incremental | full_sync predefinito: incrementalesempio: incremental |
source_id | string | Fonte di importazione a cui appartiene questo trasferimento, quando proviene da un connettore permanente e non da un caricamento occasionale. esempio: src_immoscout |
dry_run | boolean | Analizza e segnala cosa cambierebbe senza scrivere nulla. Vale la pena farlo una volta con una mappatura nuova. esempio: true |
filename | string | Nome originale del file, registrato sull'esecuzione perché un errore possa essere ricondotto al file che l'ha causato. esempio: transfer-2026-08-12.zip |
confirm_shrink | boolean | Consentire una sincronizzazione completa che ritirerebbe gran parte del portafoglio della fonte. Senza questo, una consegna con molti meno record di quanti la fonte ne detenga attualmente vede i propri ritiri trattenuti e l'esecuzione segnalata come parziale, presumendo che l'esportazione fosse troncata. Attivarlo quando la riduzione è reale. esempio: true |
Campi del corpo
| Nome | Tipo | Descrizione |
|---|---|---|
file | binary | Il contenuto. Mutuamente esclusivo con url. esempio: listings.csv |
Intestazioni
| Nome | Tipo | Descrizione |
|---|---|---|
Idempotency-Key | string | Impedisce che un caricamento ripetuto venga elaborato due volte. esempio: a7f3c9e2-4b1d-4e8a-9c2f-1d3b5a7c9e01 |
Corpo della richiesta
curl -sS -X POST "https://api.skautik.com/v1/api/imports" \
-H "Authorization: Bearer $SKAUTIK_API_KEY" \
-H "Idempotency-Key: 9c1f-…" \
-F "format=openimmo" \
-F "mode=incremental" \
-F "file=@transfer-2026-08-12.zip"Risposta
{
"data": {
"id": "imp_5a91c0",
"status": "validating",
"format": "openimmo",
"mode": "incremental",
"dry_run": false,
"created_at": "2026-08-12T10:04:00Z"
}
}Risposte degne di nota
- 202
- Accettato per l'elaborazione. Interroga lo stato oppure attendi import.completed.
- 415
- Il contenuto non è nel formato dichiarato.
- 422
- Il file è stato analizzato ma nessuna delle sue schede era utilizzabile.
https://api.skautik.com/v1/api/imports
POST /v1/api/imports?format=csv&mode=incremental&source_id=src_immoscout&dry_run=true HTTP/1.1
Host: api.skautik.com
Authorization: Bearer sk_live_…
Content-Type: application/json
{
"file": "listings.csv"
}/v1/api/imports/{import_id}imports:writeRecuperare un'importazione
Avanzamento, conteggi e un riepilogo di cosa è cambiato.
Parametri di percorso
| Nome | Tipo | Descrizione |
|---|---|---|
import_idobbligatorio | string | Identificatore dell'importazione. esempio: imp_3d9b7e2145 |
Risposta
{
"data": {
"id": "imp_5a91c0",
"status": "completed",
"format": "openimmo",
"mode": "incremental",
"counts": {
"read": 214,
"created": 12,
"updated": 196,
"withdrawn": 3,
"unchanged": 0,
"failed": 3
},
"started_at": "2026-08-12T10:04:02Z",
"finished_at": "2026-08-12T10:05:41Z"
}
}https://api.skautik.com/v1/api/imports/{import_id}
GET /v1/api/imports/imp_3d9b7e2145 HTTP/1.1
Host: api.skautik.com
Authorization: Bearer sk_live_…/v1/api/imports/{import_id}/recordsimports:writeElencare le schede di un'importazione
Esito scheda per scheda, compreso il motivo di eventuali fallimenti.
Filtra su failed per ottenere l'elenco di lavoro di una correzione. Ogni voce indica l'identificatore di origine e la riga o l'elemento da cui proveniva, così un problema si trova nella tua esportazione invece di doverlo indovinare.
Parametri di percorso
| Nome | Tipo | Descrizione |
|---|---|---|
import_idobbligatorio | string | Identificatore dell'importazione. esempio: imp_3d9b7e2145 |
Risposta
{
"data": [
{
"external_id": "AG-4471-0812",
"property_id": "prop_8f2a41c9d0",
"outcome": "updated",
"changed": ["price", "status"]
},
{
"external_id": "AG-4471-0904",
"property_id": null,
"outcome": "failed",
"location": "immobilie[17]",
"errors": [
{ "field": "preise.kaufpreis", "code": "missing",
"detail": "A sale listing needs a price." }
]
}
],
"meta": { "has_more": false, "limit": 50 }
}https://api.skautik.com/v1/api/imports/{import_id}/records
GET /v1/api/imports/imp_3d9b7e2145/records HTTP/1.1
Host: api.skautik.com
Authorization: Bearer sk_live_…/v1/api/imports/formatsimports:writeElencare formati e colonne accettati
Cosa può contenere un'importazione: i formati che funzionano oggi, tutte le colonne CSV e i limiti.
Servito dalle stesse tabelle che legge l'analizzatore, quindi non può restare indietro rispetto a ciò che viene realmente accettato. Vale la pena chiamarlo una volta mentre costruisci l'integrazione, invece di ricopiare l'elenco delle colonne da questa pagina.
Risposta
{
"data": {
"formats": ["blm", "csv", "json", "kyero", "openimmo"],
"csv_columns": [
"address_city", "address_country", "address_district", "address_number",
"address_postal_code", "address_province", "address_street",
"attic_sqm", "balcony_count", "balcony_terrace_sqm", "bathrooms",
"bedrooms", "cellar_sqm", "commission_amount", "commission_note",
"commission_payer", "commission_percent", "condition",
"construction_phase", "construction_type", "currency", "deposit",
"description", "description_fittings", "description_location",
"description_other", "energy_certificate_issued_at",
"energy_certificate_type", "energy_certificate_valid_until",
"energy_co2_emissions", "energy_consumption_kwh", "energy_demand_kwh",
"energy_includes_hot_water", "energy_label", "energy_primary_carrier",
"external_id", "floor", "flooring", "floors_in_building", "garden_sqm",
"half_bathrooms", "has_air_conditioning", "has_alarm_system",
"has_balcony", "has_cellar", "has_fireplace", "has_fitted_kitchen",
"has_garden", "has_guest_toilet", "has_lift", "has_pool", "has_sauna",
"has_solar_panels", "has_terrace", "heating_costs", "heating_type",
"is_barrier_free", "is_furnished", "is_leasehold",
"is_monument_protected", "kitchen_type", "latitude", "living_area_sqm",
"location_precision", "longitude", "office_area_sqm", "other_area_sqm",
"parking_included", "parking_space_count", "parking_type",
"plot_area_sqm", "price", "price_on_request", "price_period",
"property_subtype", "publish_address", "retail_area_sqm",
"service_charges", "status", "storage_area_sqm", "terrace_count",
"title", "total_area_sqm", "total_rent", "total_rooms",
"transaction_type", "type", "usable_area_sqm", "window_glazing",
"year_built", "year_renovated"
],
"limits": {
"max_records": 10000,
"max_bytes": 33554432,
"max_archive_records": 25000,
"max_archive_bytes": 536870912,
"required_field": "external_id"
},
"modes": ["incremental", "full_sync"]
}
}https://api.skautik.com/v1/api/imports/formats
GET /v1/api/imports/formats HTTP/1.1
Host: api.skautik.com
Authorization: Bearer sk_live_…/v1/api/importsimports:writeElencare le importazioni
Storico delle importazioni della tua organizzazione.
https://api.skautik.com/v1/api/imports
GET /v1/api/imports HTTP/1.1
Host: api.skautik.com
Authorization: Bearer sk_live_…/v1/api/import-sourcesimports:writeElencare le fonti di importazione
Tutti i connettori permanenti configurati dalla tua organizzazione.
Le credenziali non vengono mai restituite. Una fonte di tipo recupero porta spesso nel suo URL le credenziali del tuo server, quindi l'URL torna indietro con la password rimossa.
Risposta
{
"data": [
{
"id": "src_1d77a0",
"name": "Head office CRM",
"format": "csv",
"delivery": {
"type": "fetch_url",
"url": "https://partner:***@feeds.example.com/stock.csv"
},
"schedule": "0 */4 * * *",
"deletion_policy": "explicit_only",
"active": true,
"last_delivery_at": "2026-08-13T12:00:04Z",
"next_expected_at": "2026-08-13T16:00:00Z",
"created_at": "2026-08-12T10:04:00Z"
}
]
}https://api.skautik.com/v1/api/import-sources
GET /v1/api/import-sources HTTP/1.1
Host: api.skautik.com
Authorization: Bearer sk_live_…/v1/api/import-sourcesimports:writeCreare una fonte di importazione
Un connettore permanente che importa a intervalli programmati.
Lo configuri una volta e smetti di pensarci. Una fonte contiene il formato, il metodo di consegna, la mappatura dei campi e la politica di cancellazione, e ogni passata su di essa produce un'importazione che puoi ispezionare.
Campi del corpo
| Nome | Tipo | Descrizione |
|---|---|---|
nameobbligatorio | string | La tua etichetta per il connettore. esempio: Nightly listing sync |
formatobbligatorio | enum | Formato consegnato da questa fonte. Oggi vengono analizzati solo csv e json; gli altri sono nominati nello schema e vengono rifiutati qui, invece di essere accettati in un connettore che fallirebbe a ogni passata. csv | json esempio: csv |
deliveryobbligatorio | object | Come arrivano i dati. fetch_url preleva da un URL che ci indichi, a intervalli programmati; api_push significa che sei tu a inviarci ogni consegna. Le consegne via SFTP sono nominate nello schema e non sono ancora attive, quindi chiederne una viene rifiutato invece di ricevere credenziali per un host che non le accetterebbe mai. esempio: {"url": "https://example.com/hooks/skautik", "compression": "gzip"} |
schedule | string | Ogni quanto prelevare, per le fonti di tipo recupero. Espressione cron in UTC. Ignorata per consegne e invii, che vengono eseguiti all'arrivo. esempio: 15 3 * * * |
mapping | object | Mappatura dei campi, per i formati che ne hanno bisogno. Omettila per OpenImmo e RESO, che sono già standardizzati. esempio: {"Objektnummer": "external_id", "Kaufpreis": "price", "Wohnflaeche": "living_area"} |
deletion_policy | enum | explicit_only rispetta soltanto gli indicatori di cancellazione. absence_withdraws ritira anche tutto ciò che manca da una consegna completa, e andrebbe usata solo quando il formato è una dichiarazione completa del patrimonio. explicit_only | absence_withdraws predefinito: explicit_onlyesempio: explicit_only |
Corpo della richiesta
{
"name": "Head office CRM",
"format": "csv",
"delivery": {
"type": "fetch_url",
"url": "https://feeds.example.com/stock.csv"
},
"schedule": "0 */4 * * *",
"deletion_policy": "explicit_only"
}Risposta
{
"data": {
"id": "src_1d77a0",
"name": "Head office CRM",
"format": "csv",
"delivery": {
"type": "fetch_url",
"url": "https://feeds.example.com/stock.csv"
},
"schedule": "0 */4 * * *",
"deletion_policy": "explicit_only",
"active": true,
"next_expected_at": "2026-08-12T12:00:00Z",
"created_at": "2026-08-12T10:04:00Z"
}
}https://api.skautik.com/v1/api/import-sources
POST /v1/api/import-sources HTTP/1.1
Host: api.skautik.com
Authorization: Bearer sk_live_…
Content-Type: application/json
{
"name": "Head office CRM",
"format": "csv",
"delivery": {
"type": "fetch_url",
"url": "https://feeds.example.com/stock.csv"
},
"schedule": "0 */4 * * *",
"deletion_policy": "explicit_only"
}/v1/api/import-sources/{source_id}imports:writeRecuperare una fonte di importazione
Configurazione e stato di salute delle passate recenti.
Parametri di percorso
| Nome | Tipo | Descrizione |
|---|---|---|
source_idobbligatorio | string | Identificatore della fonte. esempio: src_immoscout |
https://api.skautik.com/v1/api/import-sources/{source_id}
GET /v1/api/import-sources/src_immoscout HTTP/1.1
Host: api.skautik.com
Authorization: Bearer sk_live_…/v1/api/import-sources/{source_id}imports:writeAggiornare una fonte di importazione
Modifica la mappatura, la programmazione o la politica di cancellazione.
Parametri di percorso
| Nome | Tipo | Descrizione |
|---|---|---|
source_idobbligatorio | string | Identificatore della fonte. esempio: src_immoscout |
Corpo della richiesta
{
"schedule": "15 3 * * *",
"active": true,
"mapping": {
"Objektnummer": "external_id",
"Kaufpreis": "price"
}
}https://api.skautik.com/v1/api/import-sources/{source_id}
PATCH /v1/api/import-sources/src_immoscout HTTP/1.1
Host: api.skautik.com
Authorization: Bearer sk_live_…
Content-Type: application/json
{
"schedule": "15 3 * * *",
"active": true,
"mapping": {
"Objektnummer": "external_id",
"Kaufpreis": "price"
}
}/v1/api/import-sources/{source_id}imports:writeEliminare una fonte di importazione
Smetti di importare da questo connettore.
Eliminare una fonte ferma le passate future. Non ritira gli immobili che ha creato, che restano sotto la tua organizzazione finché non li ritiri tu.
Parametri di percorso
| Nome | Tipo | Descrizione |
|---|---|---|
source_idobbligatorio | string | Identificatore della fonte. esempio: src_immoscout |
https://api.skautik.com/v1/api/import-sources/{source_id}
DELETE /v1/api/import-sources/src_immoscout HTTP/1.1
Host: api.skautik.com
Authorization: Bearer sk_live_…