{"openapi":"3.0.3","info":{"title":"Cortile take-home API","version":"2026.1","description":"Read-only, fictional data from three Cortile communities. All timestamps are UTC."},"servers":[{"url":"https://takehome.cortile.com"}],"paths":{"/api/v1/communities":{"get":{"summary":"List communities","description":"The buildings we manage. Each community has its own front desk with its own opening hours. Sorted by name, A to Z.","parameters":[{"name":"limit","in":"query","required":false,"description":"Items per page. Default 25, maximum 100.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from nextCursor in the previous response.","schema":{"type":"string"}}],"responses":{"200":{"description":"A page of results. nextCursor is null on the last page.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Communities"}},"nextCursor":{"type":"string","nullable":true}}}}}},"400":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/api/v1/communities/{id}":{"get":{"summary":"Get one community","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The community.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Communities"}}}}}},"404":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/api/v1/homes":{"get":{"summary":"List homes","description":"Individual flats within a community. Sorted by unit, A to Z.","parameters":[{"name":"limit","in":"query","required":false,"description":"Items per page. Default 25, maximum 100.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from nextCursor in the previous response.","schema":{"type":"string"}},{"name":"communityId","in":"query","required":false,"description":"Only homes in this community.","schema":{"type":"string"}},{"name":"block","in":"query","required":false,"description":"Only homes in this block.","schema":{"type":"string"}}],"responses":{"200":{"description":"A page of results. nextCursor is null on the last page.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Homes"}},"nextCursor":{"type":"string","nullable":true}}}}}},"400":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/api/v1/homes/{id}":{"get":{"summary":"Get one home","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The home.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Homes"}}}}}},"404":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/api/v1/residents":{"get":{"summary":"List residents","description":"People who live, or have lived, in a home. Sorted by id.","parameters":[{"name":"limit","in":"query","required":false,"description":"Items per page. Default 25, maximum 100.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from nextCursor in the previous response.","schema":{"type":"string"}},{"name":"communityId","in":"query","required":false,"description":"Only residents of this community.","schema":{"type":"string"}},{"name":"homeId","in":"query","required":false,"description":"Only residents of this home.","schema":{"type":"string"}}],"responses":{"200":{"description":"A page of results. nextCursor is null on the last page.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Residents"}},"nextCursor":{"type":"string","nullable":true}}}}}},"400":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/api/v1/residents/{id}":{"get":{"summary":"Get one resident","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The resident.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Residents"}}}}}},"404":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/api/v1/packages":{"get":{"summary":"List packages","description":"Parcels received by the front desk on behalf of residents. Sorted by receivedAt, newest first.","parameters":[{"name":"limit","in":"query","required":false,"description":"Items per page. Default 25, maximum 100.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from nextCursor in the previous response.","schema":{"type":"string"}},{"name":"communityId","in":"query","required":false,"description":"Only packages at this community.","schema":{"type":"string"}},{"name":"residentId","in":"query","required":false,"description":"Only packages for this resident.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Only packages with this status.","schema":{"type":"string"}},{"name":"since","in":"query","required":false,"description":"Only items where receivedAt is at or after this time (ISO 8601).","schema":{"type":"string","format":"date-time"}},{"name":"until","in":"query","required":false,"description":"Only items where receivedAt is before this time (ISO 8601).","schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"A page of results. nextCursor is null on the last page.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Packages"}},"nextCursor":{"type":"string","nullable":true}}}}}},"400":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/api/v1/packages/{id}":{"get":{"summary":"Get one package","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The package.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Packages"}}}}}},"404":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/api/v1/tickets":{"get":{"summary":"List maintenance tickets","description":"Repair and maintenance requests, raised by residents or staff. Sorted by createdAt, newest first.","parameters":[{"name":"limit","in":"query","required":false,"description":"Items per page. Default 25, maximum 100.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from nextCursor in the previous response.","schema":{"type":"string"}},{"name":"communityId","in":"query","required":false,"description":"Only tickets at this community.","schema":{"type":"string"}},{"name":"homeId","in":"query","required":false,"description":"Only tickets for this home.","schema":{"type":"string"}},{"name":"category","in":"query","required":false,"description":"Only tickets in this category.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Only tickets with this status.","schema":{"type":"string"}},{"name":"since","in":"query","required":false,"description":"Only items where createdAt is at or after this time (ISO 8601).","schema":{"type":"string","format":"date-time"}},{"name":"until","in":"query","required":false,"description":"Only items where createdAt is before this time (ISO 8601).","schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"A page of results. nextCursor is null on the last page.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Maintenancetickets"}},"nextCursor":{"type":"string","nullable":true}}}}}},"400":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/api/v1/tickets/{id}":{"get":{"summary":"Get one ticket","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The ticket.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Maintenancetickets"}}}}}},"404":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/api/v1/visitors":{"get":{"summary":"List visitors","description":"People who visited a home, as recorded by the door entry system. Sorted by arrivedAt, newest first.","parameters":[{"name":"limit","in":"query","required":false,"description":"Items per page. Default 25, maximum 100.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from nextCursor in the previous response.","schema":{"type":"string"}},{"name":"communityId","in":"query","required":false,"description":"Only visitors to this community.","schema":{"type":"string"}},{"name":"homeId","in":"query","required":false,"description":"Only visitors to this home.","schema":{"type":"string"}},{"name":"since","in":"query","required":false,"description":"Only items where arrivedAt is at or after this time (ISO 8601).","schema":{"type":"string","format":"date-time"}},{"name":"until","in":"query","required":false,"description":"Only items where arrivedAt is before this time (ISO 8601).","schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"A page of results. nextCursor is null on the last page.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Visitors"}},"nextCursor":{"type":"string","nullable":true}}}}}},"400":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/api/v1/visitors/{id}":{"get":{"summary":"Get one visitor","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The visitor.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Visitors"}}}}}},"404":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/api/v1/amenities":{"get":{"summary":"List amenities","description":"Shared facilities residents can book. Sorted by name, A to Z.","parameters":[{"name":"limit","in":"query","required":false,"description":"Items per page. Default 25, maximum 100.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from nextCursor in the previous response.","schema":{"type":"string"}},{"name":"communityId","in":"query","required":false,"description":"Only amenities at this community.","schema":{"type":"string"}}],"responses":{"200":{"description":"A page of results. nextCursor is null on the last page.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Amenities"}},"nextCursor":{"type":"string","nullable":true}}}}}},"400":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/api/v1/amenities/{id}":{"get":{"summary":"Get one amenity","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The amenity.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Amenities"}}}}}},"404":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/api/v1/bookings":{"get":{"summary":"List amenity bookings","description":"Bookings of shared facilities, including future bookings already made. Sorted by startsAt, latest first.","parameters":[{"name":"limit","in":"query","required":false,"description":"Items per page. Default 25, maximum 100.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from nextCursor in the previous response.","schema":{"type":"string"}},{"name":"communityId","in":"query","required":false,"description":"Only bookings at this community.","schema":{"type":"string"}},{"name":"amenityId","in":"query","required":false,"description":"Only bookings of this amenity.","schema":{"type":"string"}},{"name":"residentId","in":"query","required":false,"description":"Only bookings made by this resident.","schema":{"type":"string"}},{"name":"since","in":"query","required":false,"description":"Only items where startsAt is at or after this time (ISO 8601).","schema":{"type":"string","format":"date-time"}},{"name":"until","in":"query","required":false,"description":"Only items where startsAt is before this time (ISO 8601).","schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"A page of results. nextCursor is null on the last page.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Amenitybookings"}},"nextCursor":{"type":"string","nullable":true}}}}}},"400":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/api/v1/bookings/{id}":{"get":{"summary":"Get one booking","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The booking.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Amenitybookings"}}}}}},"404":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/api/v1/posts":{"get":{"summary":"List community posts","description":"Posts on each community's resident noticeboard. Sorted by createdAt, newest first.","parameters":[{"name":"limit","in":"query","required":false,"description":"Items per page. Default 25, maximum 100.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from nextCursor in the previous response.","schema":{"type":"string"}},{"name":"communityId","in":"query","required":false,"description":"Only posts in this community.","schema":{"type":"string"}},{"name":"since","in":"query","required":false,"description":"Only items where createdAt is at or after this time (ISO 8601).","schema":{"type":"string","format":"date-time"}},{"name":"until","in":"query","required":false,"description":"Only items where createdAt is before this time (ISO 8601).","schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"A page of results. nextCursor is null on the last page.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Communityposts"}},"nextCursor":{"type":"string","nullable":true}}}}}},"400":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/api/v1/posts/{id}":{"get":{"summary":"Get one post","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The post.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Communityposts"}}}}}},"404":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/api/v1/feedback":{"get":{"summary":"List feedback","description":"Satisfaction scores from residents, either about a specific ticket or about the building in general. Sorted by createdAt, newest first.","parameters":[{"name":"limit","in":"query","required":false,"description":"Items per page. Default 25, maximum 100.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from nextCursor in the previous response.","schema":{"type":"string"}},{"name":"communityId","in":"query","required":false,"description":"Only feedback for this community.","schema":{"type":"string"}},{"name":"ticketId","in":"query","required":false,"description":"Only feedback about this ticket.","schema":{"type":"string"}},{"name":"since","in":"query","required":false,"description":"Only items where createdAt is at or after this time (ISO 8601).","schema":{"type":"string","format":"date-time"}},{"name":"until","in":"query","required":false,"description":"Only items where createdAt is before this time (ISO 8601).","schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"A page of results. nextCursor is null on the last page.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Feedback"}},"nextCursor":{"type":"string","nullable":true}}}}}},"400":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/api/v1/feedback/{id}":{"get":{"summary":"Get one feedback entry","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The feedback entry.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Feedback"}}}}}},"404":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/api/v1/packages/summary":{"get":{"summary":"Package counts per community","description":"Package counts per community, precomputed once a day so dashboards do not have to page through every package. Deprecated. Kept for older integrations and will be removed. Prefer /api/v1/packages for live data.","deprecated":true,"responses":{"200":{"description":"Counts per community.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"generatedAt":{"type":"string","format":"date-time"},"communities":{"type":"array","items":{"type":"object","required":["communityId","received","collected","missing","awaitingCollection","unassigned"],"properties":{"communityId":{"type":"string","description":"Community the counts are for."},"received":{"type":"integer","description":"Packages received."},"collected":{"type":"integer","description":"Packages collected."},"missing":{"type":"integer","description":"Packages marked missing."},"awaitingCollection":{"type":"integer","description":"Packages at the desk waiting to be collected."},"unassigned":{"type":"integer","description":"Packages not matched to a resident."}}}}}}}}}}},"500":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}}},"components":{"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"Communities":{"type":"object","required":["id","name","city","address","timezone","blocks","frontDeskHours"],"properties":{"id":{"type":"string","description":"Unique ID, prefixed com_."},"name":{"type":"string","description":"Community name."},"city":{"type":"string","description":"City."},"address":{"type":"string","description":"Street address."},"timezone":{"type":"string","description":"IANA timezone the community operates in."},"blocks":{"type":"array","items":{"type":"string"},"description":"Block names within the community."},"frontDeskHours":{"type":"object","description":"When the front desk is staffed, in the community timezone.","additionalProperties":true}}},"Homes":{"type":"object","required":["id","communityId","block","floor","unit","bedrooms"],"properties":{"id":{"type":"string","description":"Unique ID, prefixed hom_."},"communityId":{"type":"string","description":"Community the home belongs to."},"block":{"type":"string","description":"Block name."},"floor":{"type":"integer","description":"Floor number."},"unit":{"type":"string","description":"Unit label as residents know it."},"bedrooms":{"type":"integer","description":"Number of bedrooms."}}},"Residents":{"type":"object","required":["id","communityId","homeId","firstName","lastName","email","phone","moveInDate","moveOutDate"],"properties":{"id":{"type":"string","description":"Unique ID, prefixed res_."},"communityId":{"type":"string","description":"Community the resident lives in."},"homeId":{"type":"string","description":"Home the resident lives in."},"firstName":{"type":"string","nullable":true,"description":"First name, if known."},"lastName":{"type":"string","nullable":true,"description":"Last name, if known."},"email":{"type":"string","description":"Email address."},"phone":{"type":"string","nullable":true,"description":"Phone number, if known."},"moveInDate":{"type":"string","format":"date","description":"Date the resident moved in."},"moveOutDate":{"type":"string","format":"date","nullable":true,"description":"Date the resident moved out, or null if they still live there."}}},"Packages":{"type":"object","required":["id","communityId","residentId","carrier","size","status","receivedAt","collectedAt"],"properties":{"id":{"type":"string","description":"Unique ID, prefixed pkg_."},"communityId":{"type":"string","description":"Community where the package was received."},"residentId":{"type":"string","nullable":true,"description":"Resident the package is for. null if the front desk has not matched it to a resident."},"carrier":{"type":"string","description":"Delivery company."},"size":{"type":"string","enum":["SMALL","MEDIUM","LARGE"],"description":"Rough size of the parcel."},"status":{"type":"string","enum":["DELIVERED","COLLECTED","MISSING"],"description":"DELIVERED means it is at the desk waiting to be collected."},"receivedAt":{"type":"string","format":"date-time","description":"When the front desk received the package."},"collectedAt":{"type":"string","format":"date-time","nullable":true,"description":"When the resident collected it, or null."}}},"Maintenancetickets":{"type":"object","required":["id","communityId","homeId","reportedByResidentId","category","priority","status","title","description","createdAt","firstResponseAt","resolvedAt"],"properties":{"id":{"type":"string","description":"Unique ID, prefixed tkt_."},"communityId":{"type":"string","description":"Community the ticket is for."},"homeId":{"type":"string","nullable":true,"description":"Home the ticket is about. null for communal areas."},"reportedByResidentId":{"type":"string","nullable":true,"description":"Resident who raised it. null if raised by staff."},"category":{"type":"string","enum":["LEAK","HEATING","ELECTRICAL","LIFT","DOOR_ACCESS","PEST","NOISE","APPLIANCE","OTHER"],"description":"What kind of problem it is."},"priority":{"type":"string","enum":["LOW","MEDIUM","HIGH","URGENT"],"description":"Priority set when the ticket was raised."},"status":{"type":"string","enum":["OPEN","IN_PROGRESS","RESOLVED"],"description":"Current status."},"title":{"type":"string","description":"Short summary, as written by the reporter."},"description":{"type":"string","description":"Full description, as written by the reporter."},"createdAt":{"type":"string","format":"date-time","description":"When the ticket was raised."},"firstResponseAt":{"type":"string","format":"date-time","nullable":true,"description":"When a member of staff first responded, or null."},"resolvedAt":{"type":"string","format":"date-time","nullable":true,"description":"When the ticket was marked as resolved, or null."}}},"Visitors":{"type":"object","required":["id","communityId","homeId","visitorName","purpose","preRegistered","signedInAtDesk","arrivedAt","departedAt"],"properties":{"id":{"type":"string","description":"Unique ID, prefixed vis_."},"communityId":{"type":"string","description":"Community visited."},"homeId":{"type":"string","description":"Home visited."},"visitorName":{"type":"string","description":"Name given by the visitor."},"purpose":{"type":"string","enum":["GUEST","CONTRACTOR","VIEWING","CARER","OTHER"],"description":"Reason for the visit."},"preRegistered":{"type":"boolean","description":"Whether the resident registered the visitor in advance."},"signedInAtDesk":{"type":"boolean","description":"Whether the visitor was signed in by the front desk."},"arrivedAt":{"type":"string","format":"date-time","description":"When the visitor arrived."},"departedAt":{"type":"string","format":"date-time","nullable":true,"description":"When the visitor left, or null if no departure was recorded."}}},"Amenities":{"type":"object","required":["id","communityId","name","type","capacity"],"properties":{"id":{"type":"string","description":"Unique ID, prefixed amn_."},"communityId":{"type":"string","description":"Community the amenity is in."},"name":{"type":"string","description":"Display name."},"type":{"type":"string","enum":["GYM","GUEST_SUITE","MEETING_ROOM","ROOF_TERRACE","CINEMA_ROOM"],"description":"Kind of amenity."},"capacity":{"type":"integer","description":"Maximum people (or, for a guest suite, concurrent bookings)."}}},"Amenitybookings":{"type":"object","required":["id","communityId","amenityId","residentId","status","startsAt","endsAt","createdAt","checkedInAt"],"properties":{"id":{"type":"string","description":"Unique ID, prefixed bkg_."},"communityId":{"type":"string","description":"Community of the amenity."},"amenityId":{"type":"string","description":"Amenity booked."},"residentId":{"type":"string","description":"Resident who made the booking."},"status":{"type":"string","enum":["CONFIRMED","CANCELLED"],"description":"Booking status."},"startsAt":{"type":"string","format":"date-time","description":"Start of the booking."},"endsAt":{"type":"string","format":"date-time","description":"End of the booking."},"createdAt":{"type":"string","format":"date-time","description":"When the booking was made."},"checkedInAt":{"type":"string","format":"date-time","nullable":true,"description":"When the resident checked in, or null."}}},"Communityposts":{"type":"object","required":["id","communityId","authorResidentId","body","reactionCount","replyCount","createdAt"],"properties":{"id":{"type":"string","description":"Unique ID, prefixed pst_."},"communityId":{"type":"string","description":"Community the post was made in."},"authorResidentId":{"type":"string","description":"Resident who wrote the post."},"body":{"type":"string","description":"Post text."},"reactionCount":{"type":"integer","description":"Number of reactions."},"replyCount":{"type":"integer","description":"Number of replies."},"createdAt":{"type":"string","format":"date-time","description":"When the post was made."}}},"Feedback":{"type":"object","required":["id","communityId","residentId","ticketId","score","comment","createdAt"],"properties":{"id":{"type":"string","description":"Unique ID, prefixed fdb_."},"communityId":{"type":"string","description":"Community the feedback is about."},"residentId":{"type":"string","description":"Resident who left the feedback."},"ticketId":{"type":"string","nullable":true,"description":"Ticket the feedback is about, or null for general feedback."},"score":{"type":"integer","example":4,"description":"Score from 1 (very unhappy) to 5 (very happy)."},"comment":{"type":"string","nullable":true,"description":"Optional comment."},"createdAt":{"type":"string","format":"date-time","description":"When the feedback was left."}}}},"responses":{"Error":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}