Desarrolladores
Busca en el catálogo, extrae estadísticas de mercado e inteligencia de ubicación, o envía tu propio inventario. JSON sobre HTTPS y una única clave, con clientes oficiales para seis lenguajes generados desde la propia API.
GET /v1/api/properties?city=Berlin&district=Kreuzberg&postal_code=10999 HTTP/1.1
Host: api.skautik.com
Authorization: Bearer sk_live_…Authorization: Bearer sk_live_… o X-API-Key. Ambas resuelven a la misma organización, así que usa la que le resulte más cómoda a tu cliente HTTP.
Las cuotas son por organización, no por clave. Un 429 siempre lleva Retry-After en segundos, así que un cliente nunca tiene que adivinar cuánto esperar.
Los endpoints de escritura solo tocan el inventario que ha publicado tu organización. Una clave no puede modificar datos del catálogo recogidos de un portal.
Extrae el catálogo para buscar y analizar, o envía tus propios anuncios y mantenlos al día con la misma clave.
Arquitectura
Una petición no llega a un portal. Llega a un catálogo ya recopilado, deduplicado, geocodificado y normalizado a un único esquema, de modo que un recuento de habitaciones alemán y un envío directo vuelven con la misma forma.
Inicio rápido
Crea una clave en la página de claves, instala el cliente de tu lenguaje y llama a un endpoint. Las claves se muestran una sola vez al crearlas y nunca más.
TypeScript
pnpm add @skautik/sdkC#
dotnet add package Skautik.SdkJava
com.skautik:skautik-sdk:1.0.0PHP
composer require skautik/sdkGo
go get github.com/skautikhq/skautik-sdk-goPython
pip install skautik-sdk/v1/api/properties?city=Berlin&limit=2Request
Authorization: Bearer sk_live_…
Accept: application/jsonResponse
{
"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
}
}Paginación por cursor: pagina hasta que meta.has_more sea falso, en lugar de contar desplazamientos contra un catálogo que cambia mientras lo lees.
/v1/api/markets/{city}/statisticsRequest
X-API-Key: sk_live_…Response
{
"data": {
"market_id": "berlin-de",
"interval": "month",
"series": [
{
"period": "2026-06",
"listing_count": 1211,
"median_price": 41000000,
"median_price_per_area": 554000,
"median_days_listed": 41
},
{
"period": "2026-07",
"listing_count": 1284,
"median_price": 41500000,
"median_price_per_area": 560000,
"median_days_listed": 38
}
]
},
"meta": { "computed_at": "2026-08-11T04:00:00Z" }
}Los agregados se calculan a partir del catálogo que tenemos, no de precios de operaciones cerradas. Describen el comportamiento de la oferta.
Las claves son secretos. Llama a la API desde tu servidor, nunca desde código de navegador o móvil: una clave enviada a un cliente es una clave publicada. No subas claves al repositorio. Si se filtra alguna, revócala desde la página de claves y escribe a security@skautik.com.
Referencia
Todo cuelga de /v1 y devuelve JSON. URL base https://api.skautik.com. Los endpoints de escritura actúan solo sobre el inventario que ha publicado tu propia organización.
| Method | Endpoint | Description | Common parameters |
|---|---|---|---|
| GET | /v1/api/properties | Page through the catalogue with filters. | city, district, postal_code, type, transaction_type, status, external_id, min_price, max_price, min_living_area, min_bedrooms, limit, cursor, sort, expand, language |
| POST | /v1/api/properties/search | Semantic and geographic search that is too complex for a query string. | query, polygon, bounds, filters, limit |
| GET | /v1/api/properties/{property_id} | One property with its full attribute set. | property_id, expand, language |
| POST | /v1/api/properties | Publish a record from your own inventory. | Idempotency-Key, external_id, title, property_type, transaction_type, price, currency, address |
| GET | /v1/api/markets | Every market with coverage, and how deep that coverage runs. | |
| GET | /v1/api/markets/{city}/statistics | Supply and price series over time, by property type. | city, property_type, transaction_type, interval, since |
| POST | /v1/api/imports | Upload a file, or point us at one, and process it. | format, mode, source_id, dry_run, filename, confirm_shrink, file, Idempotency-Key |
| POST | /v1/api/webhooks | Register an HTTPS endpoint for a set of events. | url, events |
Se muestran 8 de 48 endpoints. Consulta la referencia completa, con parámetros, cuerpos de respuesta y casos de error.
Trabajar con ella
Las dos cosas que toda integración hace mal. Merece la pena copiar los dos patrones de abajo tal cual.
// The client follows the cursor and stops when the API says to.
// Writing this loop by hand is where people stop on a short page,
// and a full page can still be the last one.
for await (const property of skautik.properties.listAll({ city: "Berlin" })) {
await upsert(property);
}import { ResponseError } from "@skautik/sdk";
async function withRetry<T>(call: () => Promise<T>, attempts = 5): Promise<T> {
for (let attempt = 0; ; attempt++) {
try {
return await call();
} catch (error) {
if (!(error instanceof ResponseError)) throw error;
const status = error.response.status;
if (status !== 429 && status < 500) throw error;
if (attempt === attempts - 1) throw error;
// A 429 says exactly how long to wait. Trust it over a guess, and
// add jitter so a fleet of workers does not all wake together.
const after = Number(error.response.headers.get("Retry-After") ?? 0);
const backoff = after > 0 ? after * 1000 : 2 ** attempt * 250;
await new Promise((r) => setTimeout(r, backoff + Math.random() * 250));
}
}
}Límites
Los límites se aplican por organización sobre todas sus claves, así que añadir claves no añade cuota. Superar uno devuelve 429 con Retry-After en segundos.
El consumo actual frente a tu asignación está en la página de claves, y las cuotas de cada plan en la página para empresas.
Antes de construir
Nada de esto es un motivo para no usar la API. Son las cosas que muerden a una integración escrita sobre suposiciones optimistas.
Los anuncios recopilados se vuelven a comprobar de forma programada. Muestra a tus usuarios la última hora de confirmación en lugar de dar a entender que el precio es el de este segundo.
Cada fuente publica cosas distintas. Trata todo campo opcional como opcional, incluidos la superficie, el certificado energético y la dirección completa.
Los agregados y cualquier señal de precio describen el comportamiento de la oferta en nuestro catálogo. No son tasaciones y no deben usarse para decisiones de financiación.
Lee las divulgaciones de la plataforma para conocer el detalle de fuentes y actualización, las condiciones de la API para las reglas de caché, atribución y reventa, y el aviso de vivienda justa si estás construyendo algo que anuncie o segmente vivienda.