MENU navbar-image

Introduction

Getting Started

The Kamma API provides programmatic access, via a RESTful API, to Kamma’s technical architecture allowing you to integrate into your platform.

In order to gain access, you'll need a valid Kamma API key. If you do not have one, please request it at support@kammadata.com.

Endpoints

$ http GET https://kamma.api.kammadata.com/api/properties/determination-check/geoplace:uprn:123456789123

 HTTP/1.1 302 Found
 Cache-Control: max-age=1
 Connection: keep-alive
 Content-Length: 271
 Content-Type: text/html; charset=utf-8
 Location: https://kamma.api.kammadata.com/api/properties/determination-check/geoplace:uprn:123456789123

All API resources are accessed from the https://kamma.api.kammadata.com/api endpoint, which supports SSL/TLS access only. Accessing any API resource via vanilla HTTP will return an HTTP redirect status of 302 Found in the response headers, together with a Location response header with the corresponding SSL protected URL for the resource.

This documentation aims to provide all the information you need to work with our API.

Headers

Content-Type: application/json
Accept: application/json

Unless explicitly documented in this API documentation, all API request and response bodies must be encoded as UTF-8 JSON. API requests should set the Content-Type header as follows:

Rate Limiting

To preserve the stability and availability of the Kamma platform, the Kamma API has rate limits that cap the number of requests that you can make against all endpoints of the API. If you exceed the rate limit an HTTP status code of 429 Too Many Requests will be returned.

The Kamma API provides HTTP response headers that should be examined by your application to determine the maximum and current rate limits for your API key.

X-RateLimit-Limit - the maximum number of requests that you can make within the current rate limiting period.

X-RateLimit-Remaining - the number of requests remaining within the current rate limiting period.

Your application should inspect the HTTP status code and response headers and take action accordingly. If rate limited, you should implement a phased back-off and retry schedule until the current rate limiting period has expired.

Concurrency Limits

Informal concurrency limits of 2 maximum concurrent requests are in place. While not strictly enforced, adhering to these guidelines ensures optimal performance.

Property Identifiers

The Kamma API allows you to query a single property and to manage a portfolio of multiple properties. To operate efficiently, and accurately it's critical to identify a single, specific and unique property. This can in one of three ways:

Kamma Property Id

kamma:property:ea357bde17331f4217bd7898c50175fa

The Kamma Property Id is a unique identifier returned in an API response body by the Property Create endpoint, which is part of the Property Methods collection of endpoints. This identifier is then used in the URI path to uniquely identify a property in other endpoints within the Property Methods collection.

A Property Id is a string value, prefixed with the kamma:property: namespace and predicate.

Please remember that a Property Id refers to a specific property that has already been added to the Kamma Platform by the API; you cannot supply your own version of a Property Id, but should you with to associate an identifier of your own with a property, the external_reference field in the request body for the Property Create and Property Sync endpoints enable this.

UPRN

geoplace:uprn:100023433011

A unique identifier for an addressable location, including a specific property, that is found in data sets produced by Ordnance Survey, in services that use this data and in some open data sets.

In the context of the Kamma API a UPRN uniquely and unambiguously identifies a specific property. If you have access to UPRNs for your properties you should use this identifier for your properties in the Kamma API in preference to an address (see below).

A UPRN is an integer value, prefixed with the geoplace:uprn: namespace and predicate.

Address

kamma:address:thanet+house+231+strand+london+wc2r+1da

A full street level address, including the postcode. If provided instead of a UPRN, the Kamma API will attempt to derive the corresponding UPRN for the supplied address. As a result, the more components of the address that are provided the more likely an accurate match to a UPRN will be able to be determined. At a bare minimum the property name or number, building name (if present), street name, locality or post town and postcode should be provided as part of the address.

An address should be passed to the Kamma API as a string prefixed with the kamma:address: namespace and predicate and with the full address MIME or URL encoded.

Authenticating requests

X-SSO-API-KEY: [example-api-key]
Content-Type: application/json
Accept: application/json

This API is authenticated by sending a X-SSO-API-Key header with a value set to your supplied API key.

You must also send a X-SSO-Service-Key header with a value set to your supplied service key.

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

If an invalid API key is specified or the API key is missing, an HTTP status of 401 Unauthorized will be returned in the response headers.

EPC Checker Methods

Current Identifier EPC Status

requires authentication

The EPC Checker Methods return information on EPCs for the subject property.

Example request:
curl --request GET \
    --get "https://kamma.api.kammadata.com/api/properties/epc-check/geoplace:uprn:100023433011" \
    --header "X-SSO-API-Key: {{KAMMA_SSO_API_KEY}}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://kamma.api.kammadata.com/api/properties/epc-check/geoplace:uprn:100023433011"
);

const headers = {
    "X-SSO-API-Key": "{{KAMMA_SSO_API_KEY}}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://kamma.api.kammadata.com/api/properties/epc-check/geoplace:uprn:100023433011';
$response = $client->get(
    $url,
    [
        'headers' => [
            'X-SSO-API-Key' => '{{KAMMA_SSO_API_KEY}}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://kamma.api.kammadata.com/api/properties/epc-check/geoplace:uprn:100023433011'
headers = {
  'X-SSO-API-Key': '{{KAMMA_SSO_API_KEY}}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200, Success):


{
    "result": {
        "certificate": {
            "uprn": 100011623123,
            "address1": "6, Ashmeade",
            "address2": "Hale Barns",
            "post_town": "ALTRINCHAM",
            "postcode": "WA15 0DB",
            "building_reference_number": 4251743578,
            "current_energy_rating": "C",
            "potential_energy_rating": "B",
            "current_energy_efficiency": 74,
            "potential_energy_efficiency": 84,
            "property_type": "House",
            "built_form": "Detached",
            "inspection_date": "2017-08-15",
            "lodgement_date": "2017-08-15",
            "transaction_type": "marketed sale",
            "environment_impact_current": 66,
            "environment_impact_potential": 80,
            "energy_consumption_current": 165,
            "energy_consumption_potential": 96,
            "co2_emissions_current": 5.6,
            "co2_emiss_curr_per_floor_area": 30,
            "co2_emissions_potential": 3.3,
            "lighting_cost_current": 156,
            "lighting_cost_potential": 92,
            "heating_cost_current": 1015,
            "heating_cost_potential": 769,
            "hot_water_cost_current": 226,
            "hot_water_cost_potential": 80,
            "total_floor_area": 186,
            "energy_tariff": "Single",
            "mains_gas_flag": "Y",
            "main_heating_controls": "2104",
            "multi_glaze_proportion": 90,
            "glazed_type": "double glazing installed before 2002",
            "glazed_area": "Normal",
            "extension_count": "1",
            "number_habitable_rooms": 7,
            "number_heated_rooms": 7,
            "low_energy_lighting": 30,
            "number_open_fireplaces": 0,
            "hotwater_description": "From main system",
            "hot_water_energy_eff": "Good",
            "hot_water_env_eff": "Good",
            "floor_description": "Solid, no insulation (assumed)",
            "windows_description": "Mostly double glazing",
            "windows_energy_eff": "Average",
            "windows_env_eff": "Average",
            "walls_description": "Cavity wall, filled cavity",
            "walls_energy_eff": "Good",
            "walls_env_eff": "Good",
            "secondheat_description": "Room heaters, dual fuel (mineral and wood)",
            "roof_description": "Pitched, 270 mm loft insulation",
            "roof_energy_eff": "Good",
            "roof_env_eff": "Good",
            "mainheat_description": "Boiler and radiators, mains gas",
            "mainheat_energy_eff": "Good",
            "mainheat_env_eff": "Good",
            "mainheatcont_description": "Programmer and room thermostat",
            "mainheatc_energy_eff": "Average",
            "mainheatc_env_eff": "Average",
            "lighting_description": "Low energy lighting in 30% of fixed outlets",
            "lighting_energy_eff": "Average",
            "lighting_env_eff": "Average",
            "main_fuel": "mains gas (not community)",
            "wind_turbine_count": 0,
            "solar_water_heating_flag": "N",
            "mechanical_ventilation": "natural",
            "address": "6, Ashmeade, Hale Barns",
            "local_authority_label": "Trafford",
            "constituency_label": "Altrincham and Sale West",
            "construction_age_band": "England and Wales: 1983-1990",
            "lodgement_datetime": "2017-08-15T19:03:44+00:00",
            "tenure": "owner-occupied"
        },
        "recommendations": [
            {
                "item_text": "Solid floor insulation",
                "indicative_cost": [
                    4000,
                    6000
                ]
            },
            {
                "item_text": "Increase hot water cylinder insulation",
                "indicative_cost": [
                    15,
                    30
                ]
            },
            {
                "item_text": "Low energy lighting for all fixed outlets",
                "indicative_cost": [
                    70
                ]
            },
            {
                "item_text": "Upgrading heating controls",
                "indicative_cost": [
                    350,
                    450
                ]
            },
            {
                "item_text": "Replace boiler with new condensing boiler",
                "indicative_cost": [
                    2200,
                    3000
                ]
            },
            {
                "item_text": "Solar water heating",
                "indicative_cost": [
                    4000,
                    6000
                ]
            },
            {
                "item_text": "Replacement glazing units",
                "indicative_cost": [
                    1000,
                    1400
                ]
            }
        ]
    },
    "status": {
        "code": 200,
        "message": "OK"
    },
    "response_id": "1234-1234-1234-1234-1234"
}
 

Example response (400, Invalid Identifier token):


{
    "status": 400,
    "message": "Bad Request",
    "code": 101000,
    "description": "The identity token was invalid, must be in the form of geoplace:uprn:1234, kamma:address:123+Street or kamma:property:ea357bde17331f4217bd7898c50175fa. Please refer to docs for more information.",
    "response_id": "1234-1234-1234-1234-1234"
}
 

Example response (404, Address resource not found):


{
    "status": 404,
    "message": "Not Found",
    "code": 201001,
    "description": "The address resource was not found",
    "response_id": "1234-1234-1234-1234-1234"
}
 

Example response (404, EPC resource not found):


{
    "status": 404,
    "message": "Not Found",
    "code": 203001,
    "description": "The EPC resource was not found",
    "response_id": "1234-1234-1234-1234-1234"
}
 

Example response (500, System error):


{
    "status": 500,
    "message": "Internal Server error",
    "code": 201002,
    "description": "The server encountered an unexpected condition that prevented it from fulfilling the request"
}
 

Request   

GET api/properties/epc-check/{identifier}

Headers

X-SSO-API-Key      

Example: {{KAMMA_SSO_API_KEY}}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

identifier   string   

A property identifier for the required property; either a Kamma Property Id, a UPRN or an address can be used. Example: geoplace:uprn:100023433011

Response

Response Fields

response_id   string   

The unique id of API request

result   object   

The EPC object. For full description see EPC Schema.

certificate   object   

Data from the EPC

recommendations   object[]   

List of retrofit improvement recommendations from the EPC

Legislation Checker Methods

The Determination Checker Methods return information on the licensing schemes and consultations that the subject property geographically sits within. This will not give you the exact licence needed (see “Property Methods” for that) as that is dependent on the occupancy profile of the property (i.e. how many people are occupying it).

This also includes the same information on HMO (C3 -> C4) Article 4 Directions.

GET api/properties/determination-check/{identifier}

requires authentication

Example request:
curl --request GET \
    --get "https://kamma.api.kammadata.com/api/properties/determination-check/geoplace:uprn:100023433011" \
    --header "X-SSO-API-Key: {{KAMMA_SSO_API_KEY}}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://kamma.api.kammadata.com/api/properties/determination-check/geoplace:uprn:100023433011"
);

const headers = {
    "X-SSO-API-Key": "{{KAMMA_SSO_API_KEY}}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://kamma.api.kammadata.com/api/properties/determination-check/geoplace:uprn:100023433011';
$response = $client->get(
    $url,
    [
        'headers' => [
            'X-SSO-API-Key' => '{{KAMMA_SSO_API_KEY}}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://kamma.api.kammadata.com/api/properties/determination-check/geoplace:uprn:100023433011'
headers = {
  'X-SSO-API-Key': '{{KAMMA_SSO_API_KEY}}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200, Success):


{
    "result": {
        "advice": {
            "mandatory": "A Mandatory HMO scheme covers the whole of Westminster. This scheme is permanent and includes and includes all HMOs with at least 5 people on 1 storey since October 1st 2018.",
            "additional": "There are no active Additional licensing schemes at this location right now.",
            "selective": "There are no active Additional licensing schemes at this location right now.",
            "article4": "There are no active Article 4 directions at this location right now.",
            "future": "The next Article 4 direction is planned for October 10th 2018."
        },
        "planning": [
            {
                "id": 123,
                "name": "",
                "type": "article4",
                "state": {
                    "in": false,
                    "active": false,
                    "future": true,
                    "expired": null,
                    "consultation": false
                },
                "criteria": {
                    "date_start": "2018-10-01T00:00:00.000Z",
                    "date_end": null,
                    "above_commercial": null,
                    "property_category": null,
                    "restrict_from": "C3",
                    "restrict_to": "C4"
                },
                "link": "https://www.royalgreenwich.gov.uk/info/200191/planning_policy_and_strategy/1793/article_4_direction_areas/2"
            }
        ],
        "schemes": [
            {
                "id": 123,
                "name": "",
                "type": "mandatory",
                "state": {
                    "in": true,
                    "active": true,
                    "future": false,
                    "expired": null,
                    "consultation": false
                },
                "criteria": {
                    "date_start": "2006-04-01T00:00:00.000Z",
                    "date_end": null,
                    "above_commercial": 0,
                    "configurations": [
                        {
                            "households": 2,
                            "people": 5,
                            "storeys": 1
                        }
                    ]
                },
                "link": "https://www.royalgreenwich.gov.uk/info/200290/multiple_occupancy_homes/937/apply_for_a_hmo_licence"
            }
        ]
    },
    "status": {
        "code": 200,
        "message": "OK"
    },
    "response_id": "1234-1234-1234-1234-1234"
}
 

Example response (400, Invalid PropertyToken token):


{
    "status": 400,
    "message": "Bad Request",
    "code": 101000,
    "description": "The identity token was invalid, must be in the form of geoplace:uprn:1234, kamma:address:123+Street or kamma:property:ea357bde17331f4217bd7898c50175fa. Please refer to docs for more information.",
    "response_id": "1234-1234-1234-1234-1234"
}
 

Example response (404, Address resource not found):


{
    "status": 404,
    "message": "Not Found",
    "code": 201001,
    "description": "The address resource was not found",
    "response_id": "1234-1234-1234-1234-1234"
}
 

Example response (404, Licence determination resource not found):


{
    "status": 404,
    "message": "Not Found",
    "code": 202001,
    "description": "The licence determination resource was not found",
    "response_id": "1234-1234-1234-1234-1234"
}
 

Example response (500, System error):


{
    "status": 500,
    "message": "Internal Server error",
    "code": 201002,
    "description": "The server encountered an unexpected condition that prevented it from fulfilling the request"
}
 

Request   

GET api/properties/determination-check/{identifier}

Headers

X-SSO-API-Key      

Example: {{KAMMA_SSO_API_KEY}}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

identifier   string   

A property identifier for the required property; either a Kamma Property Id, a UPRN or an address can be used. Example: geoplace:uprn:100023433011

Response

Response Fields

response_id   string   

The unique id of this API request

result   object   

Licensing determination result. For full description see Determination Schema.

advice   object[]   

List of licensing schemes that cover the subject property in plain English textual format. N.B. this refers to the geographic location of the property, not its occupancy profile

planning   object[]   

List of HMO Article 4 Directions that cover the subject property. N.B. this refers to the geographic location of the property, not its HMO status

schemes   object[]   

List of licensing schemes that cover the subject property broken into various data fields. N.B. this refers to the geographic location of the property, not its occupancy profile

Licence Register Methods

Current Identifier Licensing Status

requires authentication

The Licensing Checker Methods return information on applicable licensing schemes to the subject property given its occupancy profile and other relevant property data.

Example request:
curl --request GET \
    --get "https://kamma.api.kammadata.com/api/properties/licensing-check/geoplace:uprn:100023433011" \
    --header "X-SSO-API-Key: {{KAMMA_SSO_API_KEY}}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://kamma.api.kammadata.com/api/properties/licensing-check/geoplace:uprn:100023433011"
);

const headers = {
    "X-SSO-API-Key": "{{KAMMA_SSO_API_KEY}}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://kamma.api.kammadata.com/api/properties/licensing-check/geoplace:uprn:100023433011';
$response = $client->get(
    $url,
    [
        'headers' => [
            'X-SSO-API-Key' => '{{KAMMA_SSO_API_KEY}}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://kamma.api.kammadata.com/api/properties/licensing-check/geoplace:uprn:100023433011'
headers = {
  'X-SSO-API-Key': '{{KAMMA_SSO_API_KEY}}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200, Success):


{
    "result": {
        "current": {
            "hmo": true
        },
        "historic": {
            "hmo": true
        },
        "licences": [
            {
                "type": "additional",
                "address": "52, Crown Street, London, WC1E 6JP",
                "licencee": "Mr John Smith",
                "people": 0,
                "households": 0,
                "status": "approved",
                "date_start": "2018-05-09",
                "date_end": "2023-05-09"
            },
            {
                "type": "additional",
                "address": "52, Crown Street, London, WC1E 6JP",
                "licencee": "Mr John Smith",
                "people": 5,
                "households": 5,
                "status": "approved",
                "date_start": "2018-05-09",
                "date_end": "2023-05-09"
            }
        ]
    },
    "status": {
        "code": 200,
        "message": "OK"
    },
    "response_id": "1234-1234-1234-1234-1234"
}
 

Example response (400, Invalid PropertyToken token):


{
    "status": 400,
    "message": "Bad Request",
    "code": 101000,
    "description": "The identity token was invalid, must be in the form of geoplace:uprn:1234, kamma:address:123+Street or kamma:property:ea357bde17331f4217bd7898c50175fa. Please refer to docs for more information.",
    "response_id": "1234-1234-1234-1234-1234"
}
 

Example response (404, Resource not found):


{
    "status": 404,
    "message": "Not Found",
    "code": 102000,
    "description": "The api resource was not found",
    "response_id": "1234-1234-1234-1234-1234"
}
 

Example response (500, System error):


{
    "status": 500,
    "message": "Internal Server error",
    "code": 201002,
    "description": "The server encountered an unexpected condition that prevented it from fulfilling the request"
}
 

Request   

GET api/properties/licensing-check/{identifier}

Headers

X-SSO-API-Key      

Example: {{KAMMA_SSO_API_KEY}}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

identifier   string   

A property identifier for the required property; either a Kamma Property Id, a UPRN or an address can be used. Example: geoplace:uprn:100023433011

Response

Response Fields

response_id   string   

The unique id of api request

result   object   

The licensing object. For full description see Licensing Schema.

current   object   

Data and information on active licences at the subject property address from council licence registers

historic   object   

Data and information on historic licences at the subject property address from council licence registers

licences      

Data and information on licences at the subject property address from council licence registers

Property Methods

The Property Methods return information on the licensing determination and requirement for the subject property given its occupancy profile and other relevant property data. These are the most commonly used Methods in the Kamma API.

Property Check

requires authentication

When requested with a valid identifier, this resource returns the current property details and the compliance status for the property associated with the token.

Example request:
curl --request GET \
    --get "https://kamma.api.kammadata.com/api/properties/property-check/kamma:property:d293bfc0e2fc69b2a411ecc1dcdff3e0" \
    --header "X-SSO-API-Key: {{KAMMA_SSO_API_KEY}}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://kamma.api.kammadata.com/api/properties/property-check/kamma:property:d293bfc0e2fc69b2a411ecc1dcdff3e0"
);

const headers = {
    "X-SSO-API-Key": "{{KAMMA_SSO_API_KEY}}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://kamma.api.kammadata.com/api/properties/property-check/kamma:property:d293bfc0e2fc69b2a411ecc1dcdff3e0';
$response = $client->get(
    $url,
    [
        'headers' => [
            'X-SSO-API-Key' => '{{KAMMA_SSO_API_KEY}}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://kamma.api.kammadata.com/api/properties/property-check/kamma:property:d293bfc0e2fc69b2a411ecc1dcdff3e0'
headers = {
  'X-SSO-API-Key': '{{KAMMA_SSO_API_KEY}}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200, Success):


{
    "result": {
        "id": "kamma:property:d293bfc0e2fc69b2a411ecc1dcdff3e0",
        "external_reference": "TEST_123",
        "address": "1 Tuscan Road, Greenwich, London, SE18 1SY",
        "postcode": "SE18 1SY",
        "council": "Greenwich",
        "council_websites": [
            "https://www.royalgreenwich.gov.uk",
            "https://committees.royalgreenwich.gov.uk"
        ],
        "advice_text_current": "Licensing is currently required.",
        "advice_text_future": "Licensing will be required for a scheme or direction that starts in the future.",
        "requires": {
            "current": {
                "mandatory": false,
                "additional": true,
                "selective": false,
                "article4": true
            },
            "future": {
                "mandatory": false,
                "additional": false,
                "selective": true,
                "article4": false
            },
            "future_start_date": {
                "mandatory": null,
                "additional": null,
                "selective": "2022-10-01T00:00:00.000Z",
                "article4": null
            }
        },
        "approved_scheme": {
            "id": null,
            "type": null,
            "date_start": null,
            "date_end": null
        },
        "metadata": {
            "people": 3,
            "households": 2,
            "storeys": {
                "external": null,
                "internal": null
            },
            "rooms": null,
            "above_commercial": null,
            "property_category": null,
            "property_class": "unknown",
            "notes": ""
        },
        "analysis": [
            "Additional scheme requirements met",
            "Selective Scheme upcoming",
            "Use Class: C4"
        ],
        "actions": [
            "This selective scheme is due to start, early bird discounts for applications may apply.",
            "Apply for Additional licence",
            "Planning permission required"
        ],
        "regulations": [
            {
                "id": 126,
                "type": "mandatory",
                "confidence": 100,
                "date_start": "2006-04-01T00:00:00.000Z",
                "date_end": null,
                "link": "https://www.royalgreenwich.gov.uk/info/200290/multiple_occupancy_homes/937/apply_for_a_hmo_licence",
                "consultation": 0
            },
            {
                "id": 127,
                "type": "additional",
                "confidence": 100,
                "date_start": "2017-10-01T00:00:00.000Z",
                "date_end": "2022-09-30T23:59:59.000Z",
                "link": "https://www.royalgreenwich.gov.uk/info/200290/multiple_occupancy_homes/937/apply_for_a_hmo_licence",
                "consultation": 0
            },
            {
                "id": 806,
                "type": "selective",
                "confidence": 100,
                "date_start": "2022-10-01T00:00:00.000Z",
                "date_end": "2027-09-30T23:59:59.000Z",
                "link": "https://committees.royalgreenwich.gov.uk/CalendarofMeetings/tabid/70/ctl/ViewMeetingPublic/mid/397/Meeting/2320/Committee/72/SelectedTab/Documents/Default.aspx",
                "consultation": 0
            },
            {
                "id": 10,
                "type": "article4",
                "confidence": null,
                "date_start": "2018-10-01T00:00:00.000Z",
                "date_end": null,
                "link": "https://www.royalgreenwich.gov.uk/info/200191/planning_policy_and_strategy/1793/article_4_direction_areas/2",
                "consultation": 0
            }
        ],
        "licence_application": {
            "status": null,
            "application": {
                "type": null,
                "date_start": null,
                "date_end": null,
                "max_people": null,
                "max_households": null,
                "reference": null
            }
        },
        "planning_application": {
            "status": null,
            "application": {
                "type": null
            }
        }
    },
    "status": {
        "code": 200,
        "message": "OK"
    },
    "response_id": "409228f9-1583-4993-8efe-25a073ba757d"
}
 

Example response (400, Invalid PropertyToken token):


{
    "status": 400,
    "message": "Bad Request",
    "code": 101000,
    "description": "The identity token was invalid, must be in the form of kamma:property:ea357bde17331f4217bd7898c50175fa. Please refer to docs for more information.",
    "response_id": "1234-1234-1234-1234-1234"
}
 

Example response (404, Property resource not found):


{
    "status": 404,
    "message": "Not Found",
    "code": 205001,
    "description": "The property resource was not found",
    "response_id": "1234-1234-1234-1234-1234"
}
 

Example response (500, System error):


{
    "status": 500,
    "message": "Internal Server error",
    "code": 201002,
    "description": "The server encountered an unexpected condition that prevented it from fulfilling the request"
}
 

Request   

GET api/properties/property-check/{identifier}

Headers

X-SSO-API-Key      

Example: {{KAMMA_SSO_API_KEY}}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

identifier   string   

A Kamma Property Id. Example: kamma:property:d293bfc0e2fc69b2a411ecc1dcdff3e0

Response

Response Fields

response_id   string   

The unique id of api request

result   object   

The success state. For full description see Identifier Schema.

id   string   

The property unique identifier

external_reference   string   

The external property reference

address   string   

The property address

postcode   string   

The property postcode

council   string   

The council that the property sits within

council_websites   string[]   

List of council licensing website links

active_text_current   string   

Advice text that states if a licence is currently required

active_text_future   string   

Advice text that states if a licence will be required in relation to a scheme that is designated to start at a future date

requires   object   

Current and future requirements

approved_scheme   object   

Approved scheme details

metadata   object   

Additional information about property

analysis   string[]   

Advice on the type of analysis that should be performed

actions   string[]   

Advice on the actions that should be performed

regulations   object[]   

The direct regulatory information of the schemes that apply to the property

licence_application   object   

Licence application

planning_application   object   

Planning application

Property Create

requires authentication

This endpoint creates a new property in the Kamma Platform and returns licensing compliance determination that is able to be calculated based on the tenancy information supplied. If all information is provided on creation an accurate determination can be made, otherwise this endpoint can be used to create a placeholder property and the tenancy information can be refined at a later stage by the Property Sync endpoint.

A full street level address, including postcode, or a UPRN, must be provided for this endpoint in the address field of the request body. If an address is provided that does not contain the postcode or a UPRN is provided, the postcode must also be provided in the postcode field of the request body.

Example request:
curl --request POST \
    "https://kamma.api.kammadata.com/api/properties/create" \
    --header "X-SSO-API-Key: {{KAMMA_SSO_API_KEY}}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"address\": \"52 Crown Street, London, WC1E 6JP\",
    \"postcode\": \"WC1E 6JP\",
    \"external_reference\": \"ref-12345\",
    \"people\": 5,
    \"households\": 3,
    \"storeys_internal\": 2,
    \"storeys_external\": 2,
    \"above_commercial\": 1,
    \"rooms\": 3,
    \"rent\": 360000,
    \"property_category\": \"s257\",
    \"property_class\": \"flat\",
    \"notes\": \"\",
    \"licence_status\": \"inprogress\",
    \"licence_type\": \"unknown\",
    \"licence_date_start\": \"2020-01-25\",
    \"licence_date_end\": \"2025-01-25\",
    \"licence_max_people\": 5,
    \"licence_max_households\": 20,
    \"licence_reference\": \"ref-12345\",
    \"planning_status\": \"applied\",
    \"planning_reference\": \"ref-12345\"
}"
const url = new URL(
    "https://kamma.api.kammadata.com/api/properties/create"
);

const headers = {
    "X-SSO-API-Key": "{{KAMMA_SSO_API_KEY}}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "address": "52 Crown Street, London, WC1E 6JP",
    "postcode": "WC1E 6JP",
    "external_reference": "ref-12345",
    "people": 5,
    "households": 3,
    "storeys_internal": 2,
    "storeys_external": 2,
    "above_commercial": 1,
    "rooms": 3,
    "rent": 360000,
    "property_category": "s257",
    "property_class": "flat",
    "notes": "",
    "licence_status": "inprogress",
    "licence_type": "unknown",
    "licence_date_start": "2020-01-25",
    "licence_date_end": "2025-01-25",
    "licence_max_people": 5,
    "licence_max_households": 20,
    "licence_reference": "ref-12345",
    "planning_status": "applied",
    "planning_reference": "ref-12345"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://kamma.api.kammadata.com/api/properties/create';
$response = $client->post(
    $url,
    [
        'headers' => [
            'X-SSO-API-Key' => '{{KAMMA_SSO_API_KEY}}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'address' => '52 Crown Street, London, WC1E 6JP',
            'postcode' => 'WC1E 6JP',
            'external_reference' => 'ref-12345',
            'people' => 5,
            'households' => 3,
            'storeys_internal' => 2,
            'storeys_external' => 2,
            'above_commercial' => 1,
            'rooms' => 3,
            'rent' => 360000,
            'property_category' => 's257',
            'property_class' => 'flat',
            'notes' => '',
            'licence_status' => 'inprogress',
            'licence_type' => 'unknown',
            'licence_date_start' => '2020-01-25',
            'licence_date_end' => '2025-01-25',
            'licence_max_people' => 5,
            'licence_max_households' => 20,
            'licence_reference' => 'ref-12345',
            'planning_status' => 'applied',
            'planning_reference' => 'ref-12345',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://kamma.api.kammadata.com/api/properties/create'
payload = {
    "address": "52 Crown Street, London, WC1E 6JP",
    "postcode": "WC1E 6JP",
    "external_reference": "ref-12345",
    "people": 5,
    "households": 3,
    "storeys_internal": 2,
    "storeys_external": 2,
    "above_commercial": 1,
    "rooms": 3,
    "rent": 360000,
    "property_category": "s257",
    "property_class": "flat",
    "notes": "",
    "licence_status": "inprogress",
    "licence_type": "unknown",
    "licence_date_start": "2020-01-25",
    "licence_date_end": "2025-01-25",
    "licence_max_people": 5,
    "licence_max_households": 20,
    "licence_reference": "ref-12345",
    "planning_status": "applied",
    "planning_reference": "ref-12345"
}
headers = {
  'X-SSO-API-Key': '{{KAMMA_SSO_API_KEY}}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200, Success):


{
    "result": {
        "id": "kamma:property:d293bfc0e2fc69b2a411ecc1dcdff3e0",
        "external_reference": "TEST_123",
        "address": "1 Tuscan Road, Greenwich, London, SE18 1SY",
        "postcode": "SE18 1SY",
        "council": "Greenwich",
        "council_websites": [
            "https://www.royalgreenwich.gov.uk",
            "https://committees.royalgreenwich.gov.uk"
        ],
        "advice_text_current": "Licensing is currently required.",
        "advice_text_future": "Licensing will be required for a scheme or direction that starts in the future.",
        "requires": {
            "current": {
                "mandatory": false,
                "additional": true,
                "selective": false,
                "article4": true
            },
            "future": {
                "mandatory": false,
                "additional": false,
                "selective": true,
                "article4": false
            },
            "future_start_date": {
                "mandatory": null,
                "additional": null,
                "selective": "2022-10-01T00:00:00.000Z",
                "article4": null
            }
        },
        "approved_scheme": {
            "id": null,
            "type": null,
            "date_start": null,
            "date_end": null
        },
        "metadata": {
            "people": 3,
            "households": 2,
            "storeys": {
                "external": null,
                "internal": null
            },
            "rooms": null,
            "above_commercial": null,
            "property_category": null,
            "property_class": "unknown",
            "notes": ""
        },
        "analysis": [
            "Additional scheme requirements met",
            "Selective Scheme upcoming",
            "Use Class: C4"
        ],
        "actions": [
            "This selective scheme is due to start, early bird discounts for applications may apply.",
            "Apply for Additional licence",
            "Planning permission required"
        ],
        "regulations": [
            {
                "id": 126,
                "type": "mandatory",
                "confidence": 100,
                "date_start": "2006-04-01T00:00:00.000Z",
                "date_end": null,
                "link": "https://www.royalgreenwich.gov.uk/info/200290/multiple_occupancy_homes/937/apply_for_a_hmo_licence",
                "consultation": 0
            },
            {
                "id": 127,
                "type": "additional",
                "confidence": 100,
                "date_start": "2017-10-01T00:00:00.000Z",
                "date_end": "2022-09-30T23:59:59.000Z",
                "link": "https://www.royalgreenwich.gov.uk/info/200290/multiple_occupancy_homes/937/apply_for_a_hmo_licence",
                "consultation": 0
            },
            {
                "id": 806,
                "type": "selective",
                "confidence": 100,
                "date_start": "2022-10-01T00:00:00.000Z",
                "date_end": "2027-09-30T23:59:59.000Z",
                "link": "https://committees.royalgreenwich.gov.uk/CalendarofMeetings/tabid/70/ctl/ViewMeetingPublic/mid/397/Meeting/2320/Committee/72/SelectedTab/Documents/Default.aspx",
                "consultation": 0
            },
            {
                "id": 10,
                "type": "article4",
                "confidence": null,
                "date_start": "2018-10-01T00:00:00.000Z",
                "date_end": null,
                "link": "https://www.royalgreenwich.gov.uk/info/200191/planning_policy_and_strategy/1793/article_4_direction_areas/2",
                "consultation": 0
            }
        ],
        "licence_application": {
            "status": null,
            "application": {
                "type": null,
                "date_start": null,
                "date_end": null,
                "max_people": null,
                "max_households": null,
                "reference": null
            }
        },
        "planning_application": {
            "status": null,
            "application": {
                "type": null
            }
        }
    },
    "status": {
        "code": 200,
        "message": "OK"
    },
    "response_id": "409228f9-1583-4993-8efe-25a073ba757d"
}
 

Example response (400, Request body validation failed):


{
    "status": 400,
    "message": "Bad Request",
    "code": 103000,
    "description": "Validation error: The address field is required.",
    "response_id": "1234-1234-1234-1234-1234"
}
 

Example response (403, Account limit reached):


{
    "status": 403,
    "message": "Forbidden",
    "code": 600001,
    "description": "Account limit reached. Speak to Customer Support for assistance",
    "response_id": "1234-1234-1234-1234-1234"
}
 

Example response (409, Resource Conflict):


{
    "status": 409,
    "message": "Resource Conflict",
    "code": 700001,
    "description": "Request cannot complete due to conflicting operation.",
    "response_id": "1234-1234-1234-1234-1234"
}
 

Example response (500, System error):


{
    "status": 500,
    "message": "Internal Server error",
    "code": 201002,
    "description": "The server encountered an unexpected condition that prevented it from fulfilling the request"
}
 

Request   

POST api/properties/create

Headers

X-SSO-API-Key      

Example: {{KAMMA_SSO_API_KEY}}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

address   string   

A full street level address or UPRN. Example: 52 Crown Street, London, WC1E 6JP

postcode   string   

The property’s postcode. Example: WC1E 6JP

external_reference   string  optional  

Your own external reference. Example: ref-12345

people   integer  optional  

Number of people living in the property. Example: 5

households   integer  optional  

Number of households living in the property. Example: 3

storeys_internal   integer  optional  

Number of internal storeys of the building, e.g. a flat above a shop = 2 storeys. Example: 2

storeys_external   integer  optional  

Number of external storeys of the building, e.g. a flat above a shop = 2 storeys. Example: 2

above_commercial   integer  optional  

Is the property above commercial premises?. Example: 1

Must be one of:
  • 0
  • 1
rooms   integer  optional  

Number of bedrooms in the property. Example: 3

rent   integer  optional  

Amount of rent paid, weekly in pence. Example: 360000

property_category   string  optional  

This is the category of the property under the Housing Act 2004. In most cases this field can be left as null. Example: s257

Must be one of:
  • single
  • s254
  • s257
  • licenseable
property_class   string  optional  

Knowing the type of property will allow us to assess compliance in terms of residential planning permission required across the UK. Example: flat

Must be one of:
  • house
  • flat
notes   string  optional  
licence_status   string  optional  

Example: inprogress

Must be one of:
  • applied
  • inprogress
  • requested
licence_type   string  optional  

This is the result of the Kamma platform's assessment. Example: unknown

Must be one of:
  • unknown
  • mandatory
  • additional
  • selective
  • none
licence_date_start   string  optional  

Licence start date. Must be a valid date in the format Y-m-d. Example: 2020-01-25

licence_date_end   string  optional  

Licence end date. Must be a valid date in the format Y-m-d. Example: 2025-01-25

licence_max_people   integer  optional  

Both Mandatory and Additional licensing will impose a limit on the number of occupants. Example: 5

licence_max_households   integer  optional  

Example: 20

licence_reference   string  optional  

Optional; licence reference issued by the Local Authority. Example: ref-12345

planning_status   string  optional  

Example: applied

Must be one of:
  • applied
  • inprogress
  • requested
planning_reference   string  optional  

Example: ref-12345

Response

Response Fields

response_id   string   

The unique id of api request

result   object   

The success state. For full description see Identifier Schema.

id   string   

The Kamma Property Id

external_reference   string   

The external property reference

address   string   

The property address

postcode   string   

The property postcode

council   string   

The council that the property sits within

council_websites   string[]   

List of council licensing website links

active_text   string   

Advice text that states if a licence is currently required

requires   object   

Current and future requirements

approved_scheme   object   

Approved scheme details

metadata   object   

Additional information about property

analysis   string[]   

Advice on the type of analysis that should be performed

actions   string[]   

Advice on the actions that should be performed

regulations   object[]   

The direct regulatory information of the schemes that apply to the property

licence_application   object   

Licence application

planning_application   object   

Planning application

Property Sync

requires authentication

When requested with a valid identifier and payload, the property associated with the token is updated in the KammaData system.

Example request:
curl --request PUT \
    "https://kamma.api.kammadata.com/api/properties/sync/kamma:property:d293bfc0e2fc69b2a411ecc1dcdff3e0" \
    --header "X-SSO-API-Key: {{KAMMA_SSO_API_KEY}}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"address\": \"52 Crown Street, London, WC1E 6JP\",
    \"postcode\": \"WC1E 6JP\",
    \"external_reference\": \"ref-12345\",
    \"people\": 5,
    \"households\": 3,
    \"storeys_internal\": 2,
    \"storeys_external\": 2,
    \"above_commercial\": 1,
    \"rooms\": 3,
    \"rent\": 360000,
    \"property_category\": \"single\",
    \"property_class\": \"house\",
    \"notes\": \"\",
    \"licence_status\": \"inprogress\",
    \"licence_type\": \"none\",
    \"licence_date_start\": \"2020-01-25\",
    \"licence_date_end\": \"2025-01-25\",
    \"licence_max_people\": 5,
    \"licence_max_households\": 11,
    \"licence_reference\": \"ref-12345\",
    \"planning_status\": \"applied\",
    \"planning_reference\": \"ref-12345\"
}"
const url = new URL(
    "https://kamma.api.kammadata.com/api/properties/sync/kamma:property:d293bfc0e2fc69b2a411ecc1dcdff3e0"
);

const headers = {
    "X-SSO-API-Key": "{{KAMMA_SSO_API_KEY}}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "address": "52 Crown Street, London, WC1E 6JP",
    "postcode": "WC1E 6JP",
    "external_reference": "ref-12345",
    "people": 5,
    "households": 3,
    "storeys_internal": 2,
    "storeys_external": 2,
    "above_commercial": 1,
    "rooms": 3,
    "rent": 360000,
    "property_category": "single",
    "property_class": "house",
    "notes": "",
    "licence_status": "inprogress",
    "licence_type": "none",
    "licence_date_start": "2020-01-25",
    "licence_date_end": "2025-01-25",
    "licence_max_people": 5,
    "licence_max_households": 11,
    "licence_reference": "ref-12345",
    "planning_status": "applied",
    "planning_reference": "ref-12345"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://kamma.api.kammadata.com/api/properties/sync/kamma:property:d293bfc0e2fc69b2a411ecc1dcdff3e0';
$response = $client->put(
    $url,
    [
        'headers' => [
            'X-SSO-API-Key' => '{{KAMMA_SSO_API_KEY}}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'address' => '52 Crown Street, London, WC1E 6JP',
            'postcode' => 'WC1E 6JP',
            'external_reference' => 'ref-12345',
            'people' => 5,
            'households' => 3,
            'storeys_internal' => 2,
            'storeys_external' => 2,
            'above_commercial' => 1,
            'rooms' => 3,
            'rent' => 360000,
            'property_category' => 'single',
            'property_class' => 'house',
            'notes' => '',
            'licence_status' => 'inprogress',
            'licence_type' => 'none',
            'licence_date_start' => '2020-01-25',
            'licence_date_end' => '2025-01-25',
            'licence_max_people' => 5,
            'licence_max_households' => 11,
            'licence_reference' => 'ref-12345',
            'planning_status' => 'applied',
            'planning_reference' => 'ref-12345',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://kamma.api.kammadata.com/api/properties/sync/kamma:property:d293bfc0e2fc69b2a411ecc1dcdff3e0'
payload = {
    "address": "52 Crown Street, London, WC1E 6JP",
    "postcode": "WC1E 6JP",
    "external_reference": "ref-12345",
    "people": 5,
    "households": 3,
    "storeys_internal": 2,
    "storeys_external": 2,
    "above_commercial": 1,
    "rooms": 3,
    "rent": 360000,
    "property_category": "single",
    "property_class": "house",
    "notes": "",
    "licence_status": "inprogress",
    "licence_type": "none",
    "licence_date_start": "2020-01-25",
    "licence_date_end": "2025-01-25",
    "licence_max_people": 5,
    "licence_max_households": 11,
    "licence_reference": "ref-12345",
    "planning_status": "applied",
    "planning_reference": "ref-12345"
}
headers = {
  'X-SSO-API-Key': '{{KAMMA_SSO_API_KEY}}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PUT', url, headers=headers, json=payload)
response.json()

Example response (200, Success):


{
    "result": {
        "id": "kamma:property:d293bfc0e2fc69b2a411ecc1dcdff3e0",
        "external_reference": "TEST_123",
        "address": "1 Tuscan Road, Greenwich, London, SE18 1SY",
        "postcode": "SE18 1SY",
        "council": "Greenwich",
        "council_websites": [
            "https://www.royalgreenwich.gov.uk",
            "https://committees.royalgreenwich.gov.uk"
        ],
        "advice_text_current": "Licensing is currently required.",
        "advice_text_future": "Licensing will be required for a scheme or direction that starts in the future.",
        "requires": {
            "current": {
                "mandatory": false,
                "additional": true,
                "selective": false,
                "article4": true
            },
            "future": {
                "mandatory": false,
                "additional": false,
                "selective": true,
                "article4": false
            },
            "future_start_date": {
                "mandatory": null,
                "additional": null,
                "selective": "2022-10-01T00:00:00.000Z",
                "article4": null
            }
        },
        "approved_scheme": {
            "id": null,
            "type": null,
            "date_start": null,
            "date_end": null
        },
        "metadata": {
            "people": 3,
            "households": 2,
            "storeys": {
                "external": null,
                "internal": null
            },
            "rooms": null,
            "above_commercial": null,
            "property_category": null,
            "property_class": "unknown",
            "notes": ""
        },
        "analysis": [
            "Additional scheme requirements met",
            "Selective Scheme upcoming",
            "Use Class: C4"
        ],
        "actions": [
            "This selective scheme is due to start, early bird discounts for applications may apply.",
            "Apply for Additional licence",
            "Planning permission required"
        ],
        "regulations": [
            {
                "id": 126,
                "type": "mandatory",
                "confidence": 100,
                "date_start": "2006-04-01T00:00:00.000Z",
                "date_end": null,
                "link": "https://www.royalgreenwich.gov.uk/info/200290/multiple_occupancy_homes/937/apply_for_a_hmo_licence",
                "consultation": 0
            },
            {
                "id": 127,
                "type": "additional",
                "confidence": 100,
                "date_start": "2017-10-01T00:00:00.000Z",
                "date_end": "2022-09-30T23:59:59.000Z",
                "link": "https://www.royalgreenwich.gov.uk/info/200290/multiple_occupancy_homes/937/apply_for_a_hmo_licence",
                "consultation": 0
            },
            {
                "id": 806,
                "type": "selective",
                "confidence": 100,
                "date_start": "2022-10-01T00:00:00.000Z",
                "date_end": "2027-09-30T23:59:59.000Z",
                "link": "https://committees.royalgreenwich.gov.uk/CalendarofMeetings/tabid/70/ctl/ViewMeetingPublic/mid/397/Meeting/2320/Committee/72/SelectedTab/Documents/Default.aspx",
                "consultation": 0
            },
            {
                "id": 10,
                "type": "article4",
                "confidence": null,
                "date_start": "2018-10-01T00:00:00.000Z",
                "date_end": null,
                "link": "https://www.royalgreenwich.gov.uk/info/200191/planning_policy_and_strategy/1793/article_4_direction_areas/2",
                "consultation": 0
            }
        ],
        "licence_application": {
            "status": null,
            "application": {
                "type": null,
                "date_start": null,
                "date_end": null,
                "max_people": null,
                "max_households": null,
                "reference": null
            }
        },
        "planning_application": {
            "status": null,
            "application": {
                "type": null
            }
        }
    },
    "status": {
        "code": 200,
        "message": "OK"
    },
    "response_id": "409228f9-1583-4993-8efe-25a073ba757d"
}
 

Example response (400, Invalid PropertyToken token):


{
    "status": 400,
    "message": "Bad Request",
    "code": 101000,
    "description": "The identity token was invalid, must be in the form of kamma:property:ea357bde17331f4217bd7898c50175fa. Please refer to docs for more information.",
    "response_id": "1234-1234-1234-1234-1234"
}
 

Example response (400, Request body validation failed):


{
    "status": 400,
    "message": "Bad Request",
    "code": 103000,
    "description": "Validation error: The address field is required.",
    "response_id": "1234-1234-1234-1234-1234"
}
 

Example response (404, Property resource not found):


{
    "status": 404,
    "message": "Not Found",
    "code": 205001,
    "description": "The property resource was not found",
    "response_id": "1234-1234-1234-1234-1234"
}
 

Example response (409, Resource Conflict):


{
    "status": 409,
    "message": "Resource Conflict",
    "code": 700001,
    "description": "Request cannot complete due to conflicting operation.",
    "response_id": "1234-1234-1234-1234-1234"
}
 

Example response (500, System error):


{
    "status": 500,
    "message": "Internal Server error",
    "code": 201002,
    "description": "The server encountered an unexpected condition that prevented it from fulfilling the request"
}
 

Request   

PUT api/properties/sync/{identifier}

Headers

X-SSO-API-Key      

Example: {{KAMMA_SSO_API_KEY}}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

identifier   string   

A Kamma Property Id. Example: kamma:property:d293bfc0e2fc69b2a411ecc1dcdff3e0

Body Parameters

address   string   

A full street level address or UPRN. Example: 52 Crown Street, London, WC1E 6JP

postcode   string   

The property’s postcode. Example: WC1E 6JP

external_reference   string  optional  

Your own external reference. Example: ref-12345

people   integer  optional  

Number of people living in the property. Example: 5

households   integer  optional  

Number of households living in the property. Example: 3

storeys_internal   integer  optional  

Number of internal storeys of the building, e.g. a flat above a shop = 2 storeys. Example: 2

storeys_external   integer  optional  

Number of external storeys of the building, e.g. a flat above a shop = 2 storeys. Example: 2

above_commercial   integer  optional  

Is the property above commercial premises?. Example: 1

Must be one of:
  • 0
  • 1
rooms   integer  optional  

Number of bedrooms in the property. Example: 3

rent   integer  optional  

Amount of rent paid, weekly in pence. Example: 360000

property_category   string  optional  

This is the category of the property under the Housing Act 2004. In most cases this field can be left as null. Example: single

Must be one of:
  • single
  • s254
  • s257
  • licenseable
property_class   string  optional  

Knowing the type of property will allow us to assess compliance in terms of residential planning permission required across the UK. Example: house

Must be one of:
  • house
  • flat
notes   string  optional  
licence_status   string  optional  

Example: inprogress

Must be one of:
  • applied
  • inprogress
  • requested
licence_type   string  optional  

This is the result of the Kamma platform's assessment. Example: none

Must be one of:
  • unknown
  • mandatory
  • additional
  • selective
  • none
licence_date_start   string  optional  

Licence start date. Must be a valid date in the format Y-m-d. Example: 2020-01-25

licence_date_end   string  optional  

Licence end date. Must be a valid date in the format Y-m-d. Example: 2025-01-25

licence_max_people   integer  optional  

Both Mandatory and Additional licensing will impose a limit on the number of occupants. Example: 5

licence_max_households   integer  optional  

Example: 11

licence_reference   string  optional  

Optional; licence reference issued by the Local Authority. Example: ref-12345

planning_status   string  optional  

Example: applied

Must be one of:
  • applied
  • inprogress
  • requested
planning_reference   string  optional  

Example: ref-12345

Response

Response Fields

response_id   string   

The unique id of api request

result   object   

The success state. For full description see Identifier Schema.

id   string   

The property unique identifier

external_reference   string   

The external property reference

address   string   

The property address

postcode   string   

The property postcode

council   string   

The property council

council_websites   string[]   

List of council websites

active_text   string   

Advice text

requires   object   

Current and future requirements

approved_scheme   object   

Approved scheme details

metadata   object   

Additional information about property

analysis   string[]   

Advice on the type of analysis that should be performed

actions   string[]   

Advice on the actions that should be performed

regulations   object[]   

The direct regulatory information of the schemes that apply to the property

licence_application   object   

Licence application

planning_application   object   

Planning application

Property Archive

requires authentication

When requested with a valid identifier, the property associated with the token is deleted from the KammaData system

Example request:
curl --request DELETE \
    "https://kamma.api.kammadata.com/api/properties/archive/kamma:property:d293bfc0e2fc69b2a411ecc1dcdff3e0" \
    --header "X-SSO-API-Key: {{KAMMA_SSO_API_KEY}}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://kamma.api.kammadata.com/api/properties/archive/kamma:property:d293bfc0e2fc69b2a411ecc1dcdff3e0"
);

const headers = {
    "X-SSO-API-Key": "{{KAMMA_SSO_API_KEY}}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://kamma.api.kammadata.com/api/properties/archive/kamma:property:d293bfc0e2fc69b2a411ecc1dcdff3e0';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'X-SSO-API-Key' => '{{KAMMA_SSO_API_KEY}}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://kamma.api.kammadata.com/api/properties/archive/kamma:property:d293bfc0e2fc69b2a411ecc1dcdff3e0'
headers = {
  'X-SSO-API-Key': '{{KAMMA_SSO_API_KEY}}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('DELETE', url, headers=headers)
response.json()

Example response (200, Success):


{
    "result": {
        "id": "kamma:property:ea357bde17331f4217bd7898c50175fa",
        "success": true
    },
    "status": {
        "code": 200,
        "message": "OK"
    },
    "response_id": "1234-1234-1234-1234-1234"
}
 

Example response (400, Invalid PropertyToken token):


{
    "status": 400,
    "message": "Bad Request",
    "code": 101000,
    "description": "The identity token was invalid, must be in the form of kamma:property:ea357bde17331f4217bd7898c50175fa. Please refer to docs for more information.",
    "response_id": "1234-1234-1234-1234-1234"
}
 

Example response (404, Property resource not found):


{
    "status": 404,
    "message": "Not Found",
    "code": 205001,
    "description": "The property resource was not found",
    "response_id": "1234-1234-1234-1234-1234"
}
 

Example response (409, Resource Conflict):


{
    "status": 409,
    "message": "Resource Conflict",
    "code": 700001,
    "description": "Request cannot complete due to conflicting operation.",
    "response_id": "1234-1234-1234-1234-1234"
}
 

Example response (500, System error):


{
    "status": 500,
    "message": "Internal Server error",
    "code": 201002,
    "description": "The server encountered an unexpected condition that prevented it from fulfilling the request"
}
 

Request   

DELETE api/properties/archive/{identifier}

Headers

X-SSO-API-Key      

Example: {{KAMMA_SSO_API_KEY}}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

identifier   string   

A Kamma Property Id. Example: kamma:property:d293bfc0e2fc69b2a411ecc1dcdff3e0

Response

Response Fields

response_id   string   

The unique id of api request

result   object   

The success state

id   string   

The property unique identifier

success   boolean   

Success state of the archive request

Schemas

Determination Schema

EPC Schema

Licensing Schema

Property Schema