curl --request GET \
--url https://{service}.{brand}.kych.co/v1/properties/{propertyId} \
--header 'Authorization: Bearer <token>' \
--header 'User-Agent: <user-agent>'const options = {
method: 'GET',
headers: {'User-Agent': '<user-agent>', Authorization: 'Bearer <token>'}
};
fetch('https://{service}.{brand}.kych.co/v1/properties/{propertyId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{service}.{brand}.kych.co/v1/properties/{propertyId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"User-Agent: <user-agent>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}HttpResponse<String> response = Unirest.get("https://{service}.{brand}.kych.co/v1/properties/{propertyId}")
.header("User-Agent", "<user-agent>")
.header("Authorization", "Bearer <token>")
.asString();{
"data": {
"object": "property",
"id": "4a2f0c10-2e7a-4b9d-9b3a-1f0c9e8d7a6b",
"name": "Hilton Austin Downtown",
"code": "ATXDT",
"status": "active",
"timezone": "America/Chicago",
"createdAt": "2025-01-15T09:00:00.000Z",
"updatedAt": "2026-05-02T14:30:00.000Z"
},
"meta": {
"requestId": "req_01J9Z3K8Q2X7C5N0",
"timestamp": "2026-06-26T22:01:01.010Z"
}
}{
"type": "https://docs.kychospitality.com/errors/unknown-query-parameter",
"title": "Unknown query parameter",
"status": 400,
"detail": "The query parameter 'firstname' is not recognized. Did you mean 'firstName'?",
"moreInfo": "This endpoint only accepts documented, allow-listed parameters.",
"instance": "/v1/guests",
"code": "UNKNOWN_QUERY_PARAMETER",
"errors": [],
"requestId": "req_01J9Z3K8Q2X7C5N0",
"timestamp": "2026-06-25T22:01:01.010Z"
}{
"type": "https://docs.kychospitality.com/errors/missing-auth-header",
"title": "Missing Authorization header",
"status": 401,
"detail": "No Authorization header was provided. Send 'Authorization: Bearer <key>'.",
"moreInfo": "",
"instance": "/v1/",
"code": "MISSING_AUTH_HEADER",
"errors": [],
"requestId": "req_01J9Z3K8Q2X7C5N0",
"timestamp": "2026-06-25T22:01:01.010Z"
}{
"type": "https://docs.kychospitality.com/errors/property-access-denied",
"title": "Property access denied",
"status": 403,
"detail": "Your key is not authorized for the requested property.",
"moreInfo": "",
"instance": "/v1/rooms/1b2c3d4e-0000-0000-0000-000000000000",
"code": "PROPERTY_ACCESS_DENIED",
"errors": [],
"requestId": "req_01J9Z3K8Q2X7C5N0",
"timestamp": "2026-06-25T22:01:01.010Z"
}{
"type": "https://docs.kychospitality.com/errors/route-not-found",
"title": "Not found",
"status": 404,
"detail": "No such endpoint.",
"moreInfo": "",
"instance": "/v1/widgets",
"code": "ROUTE_NOT_FOUND",
"errors": [],
"requestId": "req_01J9Z3K8Q2X7C5N0",
"timestamp": "2026-06-25T22:01:01.010Z"
}{
"type": "https://docs.kychospitality.com/errors/not-acceptable",
"title": "Not acceptable",
"status": 406,
"detail": "This endpoint only produces application/json. Requested Accept could not be satisfied.",
"moreInfo": "",
"instance": "/v1/properties",
"code": "NOT_ACCEPTABLE",
"errors": [],
"requestId": "req_01J9Z3K8Q2X7C5N0",
"timestamp": "2026-06-25T22:01:01.010Z"
}{
"type": "https://docs.kychospitality.com/errors/rate-limited",
"title": "Too many requests",
"status": 429,
"detail": "Rate limit exceeded. Retry after 30 seconds.",
"moreInfo": "",
"instance": "/v1/guests",
"code": "RATE_LIMITED",
"errors": [],
"requestId": "req_01J9Z3K8Q2X7C5N0",
"timestamp": "2026-06-25T22:01:01.010Z"
}{
"type": "https://docs.kychospitality.com/errors/internal-error",
"title": "Internal server error",
"status": 500,
"detail": "An unexpected error occurred. Contact support with the requestId.",
"moreInfo": "",
"instance": "/v1/guests",
"code": "INTERNAL_ERROR",
"errors": [],
"requestId": "req_01J9Z3K8Q2X7C5N0",
"timestamp": "2026-06-25T22:01:01.010Z"
}{
"type": "https://docs.kychospitality.com/errors/service-unavailable",
"title": "Service unavailable",
"status": 503,
"detail": "The service is temporarily unavailable. Retry after 30 seconds.",
"moreInfo": "",
"instance": "/v1/properties",
"code": "SERVICE_UNAVAILABLE",
"errors": [],
"requestId": "req_01J9Z3K8Q2X7C5N0",
"timestamp": "2026-06-25T22:01:01.010Z"
}Get a property
Returns a single property by ID. The path parameter is the property, so
no Kyc-Property-Id header is needed. 404 if the ID does not exist or your key cannot access it.
curl --request GET \
--url https://{service}.{brand}.kych.co/v1/properties/{propertyId} \
--header 'Authorization: Bearer <token>' \
--header 'User-Agent: <user-agent>'const options = {
method: 'GET',
headers: {'User-Agent': '<user-agent>', Authorization: 'Bearer <token>'}
};
fetch('https://{service}.{brand}.kych.co/v1/properties/{propertyId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{service}.{brand}.kych.co/v1/properties/{propertyId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"User-Agent: <user-agent>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}HttpResponse<String> response = Unirest.get("https://{service}.{brand}.kych.co/v1/properties/{propertyId}")
.header("User-Agent", "<user-agent>")
.header("Authorization", "Bearer <token>")
.asString();{
"data": {
"object": "property",
"id": "4a2f0c10-2e7a-4b9d-9b3a-1f0c9e8d7a6b",
"name": "Hilton Austin Downtown",
"code": "ATXDT",
"status": "active",
"timezone": "America/Chicago",
"createdAt": "2025-01-15T09:00:00.000Z",
"updatedAt": "2026-05-02T14:30:00.000Z"
},
"meta": {
"requestId": "req_01J9Z3K8Q2X7C5N0",
"timestamp": "2026-06-26T22:01:01.010Z"
}
}{
"type": "https://docs.kychospitality.com/errors/unknown-query-parameter",
"title": "Unknown query parameter",
"status": 400,
"detail": "The query parameter 'firstname' is not recognized. Did you mean 'firstName'?",
"moreInfo": "This endpoint only accepts documented, allow-listed parameters.",
"instance": "/v1/guests",
"code": "UNKNOWN_QUERY_PARAMETER",
"errors": [],
"requestId": "req_01J9Z3K8Q2X7C5N0",
"timestamp": "2026-06-25T22:01:01.010Z"
}{
"type": "https://docs.kychospitality.com/errors/missing-auth-header",
"title": "Missing Authorization header",
"status": 401,
"detail": "No Authorization header was provided. Send 'Authorization: Bearer <key>'.",
"moreInfo": "",
"instance": "/v1/",
"code": "MISSING_AUTH_HEADER",
"errors": [],
"requestId": "req_01J9Z3K8Q2X7C5N0",
"timestamp": "2026-06-25T22:01:01.010Z"
}{
"type": "https://docs.kychospitality.com/errors/property-access-denied",
"title": "Property access denied",
"status": 403,
"detail": "Your key is not authorized for the requested property.",
"moreInfo": "",
"instance": "/v1/rooms/1b2c3d4e-0000-0000-0000-000000000000",
"code": "PROPERTY_ACCESS_DENIED",
"errors": [],
"requestId": "req_01J9Z3K8Q2X7C5N0",
"timestamp": "2026-06-25T22:01:01.010Z"
}{
"type": "https://docs.kychospitality.com/errors/route-not-found",
"title": "Not found",
"status": 404,
"detail": "No such endpoint.",
"moreInfo": "",
"instance": "/v1/widgets",
"code": "ROUTE_NOT_FOUND",
"errors": [],
"requestId": "req_01J9Z3K8Q2X7C5N0",
"timestamp": "2026-06-25T22:01:01.010Z"
}{
"type": "https://docs.kychospitality.com/errors/not-acceptable",
"title": "Not acceptable",
"status": 406,
"detail": "This endpoint only produces application/json. Requested Accept could not be satisfied.",
"moreInfo": "",
"instance": "/v1/properties",
"code": "NOT_ACCEPTABLE",
"errors": [],
"requestId": "req_01J9Z3K8Q2X7C5N0",
"timestamp": "2026-06-25T22:01:01.010Z"
}{
"type": "https://docs.kychospitality.com/errors/rate-limited",
"title": "Too many requests",
"status": 429,
"detail": "Rate limit exceeded. Retry after 30 seconds.",
"moreInfo": "",
"instance": "/v1/guests",
"code": "RATE_LIMITED",
"errors": [],
"requestId": "req_01J9Z3K8Q2X7C5N0",
"timestamp": "2026-06-25T22:01:01.010Z"
}{
"type": "https://docs.kychospitality.com/errors/internal-error",
"title": "Internal server error",
"status": 500,
"detail": "An unexpected error occurred. Contact support with the requestId.",
"moreInfo": "",
"instance": "/v1/guests",
"code": "INTERNAL_ERROR",
"errors": [],
"requestId": "req_01J9Z3K8Q2X7C5N0",
"timestamp": "2026-06-25T22:01:01.010Z"
}{
"type": "https://docs.kychospitality.com/errors/service-unavailable",
"title": "Service unavailable",
"status": 503,
"detail": "The service is temporarily unavailable. Retry after 30 seconds.",
"moreInfo": "",
"instance": "/v1/properties",
"code": "SERVICE_UNAVAILABLE",
"errors": [],
"requestId": "req_01J9Z3K8Q2X7C5N0",
"timestamp": "2026-06-25T22:01:01.010Z"
}Authorizations
API key sent as a bearer token: Authorization: Bearer kyc_live_....
Keys are prefixed kyc_live_ (production) or kyc_test_ (test mode).
OAuth2 access tokens (also Bearer) may be supported later — the header never changes.
Headers
Identifies the calling application. 3–255 printable ASCII characters.
3 - 255^[\x20-\x7E]+$Optional caller-supplied opaque ID for log correlation. Echoed back and logged. Treated opaquely (never decoded). Must match the pattern below.
^[A-Za-z0-9._=+/-]{1,128}$Optional W3C Trace Context header for distributed tracing. A malformed value is ignored and a fresh trace is started (per the W3C spec) — it never causes a 4xx.
Path Parameters
Property UUID.
Response
The property.
A hotel property within the brand. STUB — minimal starting field set; expand additively (adding fields is non-breaking, Decision 3). Fields are a deliberately-curated public subset of the internal model, not the whole object.
Hide child attributes
Hide child attributes
Resource type discriminator.
"property"Property UUID (stable, never changes).
Property display name.
"Hilton Austin Downtown"
Short, human-friendly property code. Public, implementation-agnostic alias — maps from an
internal field via the API Resource. TBD: confirm the source and semantics (the internal
elasticsearch_id is currently used as a code). NEVER expose internal field names (e.g.
elasticsearch_id) to partners. Nullable until source/semantics confirmed.
"ATXDT"
Whether the property is active.
active, inactive IANA timezone name. Always present — required for correct date/time handling.
"America/Chicago"
When the property record was created (UTC).
When the property record was last updated (UTC).
Metadata present on every success response.
Hide child attributes
Hide child attributes
Server-generated ID for this request (mirrors the Kyc-Request-Id header).
"req_01J9Z3K8Q2X7C5N0"
UTC timestamp, ISO 8601 with milliseconds.
"2026-06-25T22:01:01.010Z"
Present only on list responses.
