Turnover
curl --request GET \
--url https://api.sortx.co.uk/handovers/turnover \
--header 'x-api-key: <api-key>'const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.sortx.co.uk/handovers/turnover', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.sortx.co.uk/handovers/turnover"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"today": "<string>",
"from": "<string>",
"to": "<string>",
"leadDays": 123,
"rows": [
{
"tenancyId": "<string>",
"tenancyStatus": "active",
"unitId": "<string>",
"propertyId": "<string>",
"propertyLabel": "<string>",
"unitLabel": "<string>",
"moveOutOn": "<string>",
"checkOutId": "<string>",
"checkOutReference": "<string>",
"followUps": [
{
"findingId": "<string>",
"area": "<string>",
"repair": {
"id": "<string>",
"reference": "<string>",
"status": "<string>"
},
"task": {
"id": "<string>",
"title": "<string>",
"status": "<string>"
}
}
],
"cleaningTaskId": "<string>",
"nextCheckInId": "<string>",
"plan": {
"moveOut": {
"state": "done",
"on": "<string>",
"suggested": true,
"count": 123
},
"checkOut": {
"state": "done",
"on": "<string>",
"suggested": true,
"count": 123
},
"repairs": {
"state": "done",
"on": "<string>",
"suggested": true,
"count": 123
},
"cleaning": {
"state": "done",
"on": "<string>",
"suggested": true,
"count": 123
},
"certificates": {
"state": "done",
"on": "<string>",
"suggested": true,
"count": 123,
"due": [
{
"kind": "<string>",
"label": "<string>",
"reason": "missing",
"expiresOn": "<string>"
}
]
},
"keys": {
"state": "done",
"on": "<string>",
"suggested": true,
"count": 123
},
"readyToLet": {
"state": "ready",
"on": "<string>",
"estimated": true,
"blockers": [
"not_moved_out"
],
"unknown": [
"checkOut"
]
},
"nextLet": {
"tenancyId": "<string>",
"startsOn": "<string>",
"checkIn": {
"state": "done",
"on": "<string>",
"suggested": true,
"count": 123
},
"clash": true
},
"canAdd": {
"cleaning": true,
"checkOut": true
}
}
}
],
"summary": {
"tenancies": 123,
"ready": 123,
"notReady": 123,
"unknown": 123,
"clashes": 123,
"checkOutsMissing": 123,
"cleaningMissing": 123,
"certificatesDue": 123,
"keysOut": 123
},
"noEndDate": 123,
"beyondLimit": 123
}{
"_tag": "TenantCreateRejected",
"reason": "<string>",
"field": "<string>"
}{
"_tag": "Unauthenticated"
}{
"_tag": "TenantSuspended",
"tenantId": "<string>",
"reason": "<string>"
}{
"_tag": "EntitlementMissing",
"tenantId": "<string>",
"moduleId": "<string>"
}{
"_tag": "TenantNotFound",
"slug": "<string>"
}{
"_tag": "WebhookDuplicate",
"integration": "<string>",
"externalId": "<string>"
}{
"_tag": "RateLimited",
"key": "<string>",
"retryAfterSeconds": 123,
"message": "<string>"
}{
"_tag": "IntegrationUnavailable",
"integration": "<string>",
"detail": "<string>"
}handovers
Turnover
The turnover planner: every tenancy whose move-out falls in the window, with its check-out, repairs, cleaning, certificates, keys and ready-to-let day, read from the records
GET
/
handovers
/
turnover
Turnover
curl --request GET \
--url https://api.sortx.co.uk/handovers/turnover \
--header 'x-api-key: <api-key>'const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.sortx.co.uk/handovers/turnover', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.sortx.co.uk/handovers/turnover"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"today": "<string>",
"from": "<string>",
"to": "<string>",
"leadDays": 123,
"rows": [
{
"tenancyId": "<string>",
"tenancyStatus": "active",
"unitId": "<string>",
"propertyId": "<string>",
"propertyLabel": "<string>",
"unitLabel": "<string>",
"moveOutOn": "<string>",
"checkOutId": "<string>",
"checkOutReference": "<string>",
"followUps": [
{
"findingId": "<string>",
"area": "<string>",
"repair": {
"id": "<string>",
"reference": "<string>",
"status": "<string>"
},
"task": {
"id": "<string>",
"title": "<string>",
"status": "<string>"
}
}
],
"cleaningTaskId": "<string>",
"nextCheckInId": "<string>",
"plan": {
"moveOut": {
"state": "done",
"on": "<string>",
"suggested": true,
"count": 123
},
"checkOut": {
"state": "done",
"on": "<string>",
"suggested": true,
"count": 123
},
"repairs": {
"state": "done",
"on": "<string>",
"suggested": true,
"count": 123
},
"cleaning": {
"state": "done",
"on": "<string>",
"suggested": true,
"count": 123
},
"certificates": {
"state": "done",
"on": "<string>",
"suggested": true,
"count": 123,
"due": [
{
"kind": "<string>",
"label": "<string>",
"reason": "missing",
"expiresOn": "<string>"
}
]
},
"keys": {
"state": "done",
"on": "<string>",
"suggested": true,
"count": 123
},
"readyToLet": {
"state": "ready",
"on": "<string>",
"estimated": true,
"blockers": [
"not_moved_out"
],
"unknown": [
"checkOut"
]
},
"nextLet": {
"tenancyId": "<string>",
"startsOn": "<string>",
"checkIn": {
"state": "done",
"on": "<string>",
"suggested": true,
"count": 123
},
"clash": true
},
"canAdd": {
"cleaning": true,
"checkOut": true
}
}
}
],
"summary": {
"tenancies": 123,
"ready": 123,
"notReady": 123,
"unknown": 123,
"clashes": 123,
"checkOutsMissing": 123,
"cleaningMissing": 123,
"certificatesDue": 123,
"keysOut": 123
},
"noEndDate": 123,
"beyondLimit": 123
}{
"_tag": "TenantCreateRejected",
"reason": "<string>",
"field": "<string>"
}{
"_tag": "Unauthenticated"
}{
"_tag": "TenantSuspended",
"tenantId": "<string>",
"reason": "<string>"
}{
"_tag": "EntitlementMissing",
"tenantId": "<string>",
"moduleId": "<string>"
}{
"_tag": "TenantNotFound",
"slug": "<string>"
}{
"_tag": "WebhookDuplicate",
"integration": "<string>",
"externalId": "<string>"
}{
"_tag": "RateLimited",
"key": "<string>",
"retryAfterSeconds": 123,
"message": "<string>"
}{
"_tag": "IntegrationUnavailable",
"integration": "<string>",
"detail": "<string>"
}Authorizations
A workspace API key (Settings → API keys), scoped to <group>:read / <group>:write.