Heritage data, programmatically.
REST endpoints + webhooks for integrating Castillia into your tourism portal, government registry, hospitality system, or research pipeline. Versioned, scoped, cursor-paginated.
API keys, tenant-scoped.
Tenant admins issue keys at /app/settings/api-keys. Each key carries explicit scopes (e.g. property:read) and an expiry. The full secret is shown once on creation, save it immediately.
Authorization: Bearer ck_live_<prefix>_<secret> # alternative header X-API-Key: ck_live_<prefix>_<secret>
v1 surface.
- GET /api/v1/propertiesList properties (cursor-paginated; q / status / type / country filters)
- GET /api/v1/properties/{slug}Single property with spaces, services, attributes, media
The list endpoint takes limit (50 by default, 200 at most) and an opaque cursor. Errors arrive as { error: { code, message } }: 400 for an unknown filter value or a cursor that no longer resolves, 401 without a valid key, 403 without the scope, 404 for an unknown slug, 500 if a property cannot be loaded.
Quick curl.
curl -H "Authorization: Bearer ck_live_<key>" \ "https://castillia.com/api/v1/properties?status=PUBLISHED&limit=10"
OpenAPI 3.1.
The full machine-readable spec. Drop it into Swagger UI, Postman, or a code generator.
View OpenAPI spec →Subscribe to changes.
Configure webhook subscriptions at /app/settings/webhooks. Events fire on property create / update / publish, with HMAC signing for delivery verification. Delivery is a single attempt per event, recorded against the subscription. A failed delivery is kept in the delivery log and can be sent again from there.
