Skip to content
Developers

Heritage data, programmatically.

REST endpoints + webhooks for integrating Castillia into your tourism portal, government registry, hospitality system, or research pipeline. Versioned, scoped, cursor-paginated.

Authentication

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>
Endpoints

v1 surface.

  • GET /api/v1/properties
    List 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.

Try it

Quick curl.

curl -H "Authorization: Bearer ck_live_<key>" \
  "https://castillia.com/api/v1/properties?status=PUBLISHED&limit=10"
Specification

OpenAPI 3.1.

The full machine-readable spec. Drop it into Swagger UI, Postman, or a code generator.

View OpenAPI spec →
Webhooks

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.