Introduction
Welcome to the Clifton Asset Management API! You can use our API to create Contacts, Policy & Pension Applications, Transfer Records and Beneficiaries
We have language bindings in HTTP and C# (+ more coming soon!). You can view code examples in the dark area to the right, and you can switch the programming language of the examples with the tabs in the top right.
This example API documentation page was created with Slate. Feel free to edit it and use it as a base for your own API's documentation.
Authentication
To authorize, generate a token:
GET / HTTP/1.1
Host: https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/
OData-MaxVersion: 4.0
OData-Version: 4.0
Authorization: Bearer AuthorizationTokenHere
using (WebClient webClient = new WebClient())
{
webClient.Headers.Add("Authorization", "Bearer AuthorizationTokenHere");
}
Make sure to replace
AuthorizationTokenHerewith your API key.
Access to the API is authenticated using a Bearer Token. Please request a token from us at hello@clifton-asset.co.uk
The Bearer token must be included in all API requests to the server in a header that looks like the following:
Bearer: AuthorizationTokenHere
Contacts
Create Contact
POST https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/contacts HTTP/1.1
Host: https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/
Authorization: Bearer AuthorizationTokenHere
Content-Type: application/json
{
"cam_title": 809130000,
"firstname": "Han",
"lastname": "Solo",
"emailaddress1": "Han@millenniumfalcon.com",
"gendercode": 1,
"cam_ninumber": "JJ112234A",
"address1_line1": "25 Lena Street",
"address1_line2": "",
"address1_city": "Bristol",
"address1_county": "Somerset",
"address1_postalcode": "BS5 6DB",
"cam_birthdate": "1990-04-01",
"familystatuscode": 1
}
string endpoint = "https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/contacts"
string data = "{\r\n \"cam_title\": 809130000,\r\n \"firstname\": \"Han\",\r\n \"lastname\": \"Solo\",\r\n \"emailaddress1\": \"Han@millenniumfalcon.com\",\r\n \"gendercode\": 1,\r\n \"cam_ninumber\": \"JJ112234A\",\r\n \"address1_line1\": \"25 Lena Street\",\r\n \"address1_line2\": \"\",\r\n \"address1_city\": \"Bristol\",\r\n \"address1_county\": \"Somerset\",\r\n \"address1_postalcode\": \"BS5 6DB\",\r\n \"cam_birthdate\": \"1990-04-01\",\r\n \"familystatuscode\": 1\r\n\r\n}"
using (WebClient webClient = new WebClient())
{
webClient.Headers.Add("Content-Type", "application/json");
webClient.Headers.Add("Authorization", "Bearer AuthorizationTokenHere");
try
{
string response = webClient.UploadString(endpoint, data);
}
catch (Exception e)
{
// Exception logic here
}
}
The above command returns HTTP structured like this:
HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [Organization URI]/api/data/v9.1/contacts(7eb682f1-ca75-e511-80d4-00155d2a68d1)
This endpoint creates a Contact.
HTTP Request
POST https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/contacts
Fields
| Field | Type | Required | Descritpion |
|---|---|---|---|
| cam_title | int | Yes | Allowed Values ( Mr: 809130000, Ms: 809130001, Mrs: 809130002, Miss: 809130003, Dr: 809130004, Master: 809130005, Other: 809130012 ) |
| firstname | string | Yes | The Contacts First Name |
| middlename | string | No | The Contacts Middle Name |
| lastname | string | Yes | The Contacts Last Name |
| telephone1 | string | No | The Contacts primary phone number |
| telephone2 | string | No | The Contacts secondary phone number |
| mobilephone | string | No | The Contacts mobile phone number |
| emailaddress1 | string | Yes | The Contacts email address |
| cam_nationality | string | Yes | The Contacts nationality |
| gendercode | int | Yes | Allowed Values ( Male: 1, Female: 2 ) |
| cam_ninumber | string | Yes | The Contacts national insurance number |
| address1_line1 | string | Yes | First line of the Contacts address |
| address1_line2 | string | Yes | Second line of the Contacts address |
| address1_line3 | string | No | Third line of the Contacts address |
| address1_city | string | Yes | The Contacts city |
| address1_county | string | Yes | The Contacts county |
| address1_postalcode | string | Yes | The Contacts post code |
| address1_birthdate | string | Yes | The Contacts Date of Birth |
| familystatuscode | string | Yes | The Contacts Marital status |
| cam_retirementage | string | No | The Contacts retirement age |
Get All Contacts
GET https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/contacts HTTP/1.1
Host: https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/
Authorization: Bearer AuthorizationTokenHere
using (WebClient webClient = new WebClient())
{
webClient.Headers.Add("Authorization", "Bearer AuthorizationTokenHere");
try
{
string contacts = webClient.DownloadString(address);
}
catch (Exception e)
{
// Exception logic here
}
}
The above command returns JSON structured like this:
"@odata.context": "https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/$metadata#contacts/$entity",
"value":
[
{
"@odata.etag": "W/\"80794831\"",
"contactid": "fe7926bc-6490-ea11-a811-000d3a86d74d",
"cam_title": 809130005,
"firstname": "Obi",
"middlename": "Wan",
"lastname": "Kenobi",
"telephone1": "01275813700",
"telephone2": null,
"mobilephone": "07790963725",
"emailaddress1": "BenKenobi@gmail.com",
"cam_nationality": "GB",
"gendercode": 1,
"cam_ninumber": "JJ112234A",
"address1_line1": "2 Sandy Hut Road",
"address1_line2": "Mos Eisley",
"address1_line3": null,
"address1_city": "Tatooine",
"address1_county": "Somerset",
"address1_postalcode": "TA17AT",
"cam_birthdate": "1977-05-03T23:00:00Z",
"familystatuscode": 1,
"cam_retirementage": 65
},
{
"@odata.etag": "W/\"82747829\"",
"contactid": "fcdab33b-beaf-ea11-a812-000d3a86f6ce",
"cam_title": 809130000,
"firstname": "Han",
"middlename": null,
"lastname": "Solo",
"telephone1": "01179833341",
"telephone2": null,
"mobilephone": "07711 594902",
"emailaddress1": "Han@millenniumfalcon.com",
"cam_nationality": "GB",
"gendercode": 1,
"cam_ninumber": "JJ112234A",
"address1_line1": "25 Lena Street",
"address1_line2": null,
"address1_line3": "Easton",
"address1_city": "Bristol",
"address1_county": "Somerset",
"address1_postalcode": "BS5 6DB",
"cam_birthdate": "1990-05-26T23:00:00Z",
"familystatuscode": 1,
"cam_retirementage": 70
}
]
This endpoint retrieves all Contacts.
HTTP Request
GET https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/contacts
Get Individual Contact
GET / HTTP/1.1
Host: https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/contacts(fcdab33b-beaf-ea11-a812-000d3a86f6ce)
OData-MaxVersion: 4.0
OData-Version: 4.0
Authorization: Bearer AuthorizationTokenHere
string endpoint = "https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/contacts(fcdab33b-beaf-ea11-a812-000d3a86f6ce)"
using (WebClient webClient = new WebClient())
{
webClient.Headers.Add("OData-MaxVersion", "4.0");
webClient.Headers.Add("OData-Version", "4.0");
webClient.Headers.Add("Authorization", "Bearer AuthorizationTokenHere");
try
{
string contact = webClient.DownloadString(endpoint);
}
catch (Exception e)
{
// Exception logic here
}
}
The above command returns JSON structured like this:
{
"@odata.context": "https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/$metadata#contacts/$entity",
"@odata.etag": "W/\"82747829\"",
"contactid": "fcdab33b-beaf-ea11-a812-000d3a86f6ce",
"cam_title": 809130005,
"firstname": "Obi",
"middlename": "Wan",
"lastname": "Kenobi",
"telephone1": "01275813700",
"telephone2": null,
"mobilephone": "07790963725",
"emailaddress1": "BenKenobi@gmail.com",
"cam_nationality": "GB",
"gendercode": 1,
"cam_ninumber": "JJ112234A",
"address1_line1": "2 Sandy Hut Road",
"address1_line2": "Mos Eisley",
"address1_line3": null,
"address1_city": "Tatooine",
"address1_county": "Somerset",
"address1_postalcode": "TA17AT",
"cam_birthdate": "1977-05-03T23:00:00Z",
"familystatuscode": 1,
"cam_retirementage": 65
}
This endpoint retrieves an individual Contact identified by their GUID.
HTTP Request
GET https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/contacts(GUID)
URL Parameters
| Parameter | Description |
|---|---|
| GUID | The GUID of the Contact to retrieve |
Accounts
Get Account by Name
POST https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/accounts?$select=name,accountid&$filter=contains(name,'aegon') HTTP/1.1
Host: https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/
Authorization: Bearer AuthorizationTokenHere
Content-Type: application/json
The above command returns JSON structured like this:
{
"@odata.context": "https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/$metadata#accounts(name,accountid)",
"value": [
{
"@odata.etag": "W/\"80696421\"",
"name": "AegonĀ Ltd",
"accountid": "6cb39c38-14e4-de11-883b-001517456d34"
}
]
}
This query returns the Name and ID fields of all Accounts where the Name field contains the word aegon.
HTTP Request
GET https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/accounts?$select=name,accountid&$filter=contains(name,'aegon')
Beneficiaries
Create Beneficiary
POST https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/cam_nominationofbeneficiaries HTTP/1.1
Host: https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/
Authorization: Bearer AuthorizationTokenHere
Content-Type: application/json
{
"cam_nameofbeneficiary": "Master Yo Da",
"cam_percentageoffund": 100.0000000000,
"cam_nominationdate": "2020-05-29T23:00:00Z",
"cam_relationship": "Jedi Master",
"cam_address_line1": "1 Forest Street",
"cam_address_line2": null,
"cam_address_line3": "Dagobah",
"cam_city": null,
"cam_county": null,
"cam_postcode": "BS6 5TF",
"cam_country": "GB"
}
string endpoint = "https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/cam_nominationofbeneficiaries"
string data = "{\r\n \"cam_nameofbeneficiary\": \"Master Yo Da\",\r\n \"cam_percentageoffund\": 100.0000000000,\r\n \"cam_nominationdate\": \"2020-05-29T23:00:00Z\",\r\n \"cam_relationship\": \"Jedi Master\",\r\n \"cam_address_line1\": \"1 Forest Street\",\r\n \"cam_address_line2\": null,\r\n \"cam_address_line3\": \"Dagobah\",\r\n \"cam_city\": null,\r\n \"cam_county\": null,\r\n \"cam_postcode\": \"BS6 5TF\",\r\n \"cam_country\": \"GB\"\r\n}"
using (WebClient webClient = new WebClient())
{
webClient.Headers.Add("Content-Type", "application/json");
webClient.Headers.Add("Authorization", "Bearer AuthorizationTokenHere");
try
{
string response = webClient.UploadString(endpoint, data);
}
catch (Exception e)
{
// Exception logic here
}
}
The above command returns HTTP structured like this:
HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [Organization URI]/api/data/v9.1/cam_nominationofbeneficiaries(7eb682f1-ca75-e511-80d4-00155d2a68d1)
This endpoint creates a Beneficiary.
HTTP Request
POST https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/cam_nominationofbeneficiaries
Fields
| Field | Type | Required | Descritpion |
|---|---|---|---|
| cam_nameofbeneficiary | string | Yes | The Beneficiaries Name |
| cam_percentageoffund | string | Yes | The Beneficiaries Percentage of Fund |
| cam_relationship | string | Yes | The Beneficiaries Relationship to Policy Holder |
| cam_address_line1 | string | Yes | The Beneficiaries Address Line 1 |
| cam_address_line2 | string | No | The Beneficiaries Address Line 2 |
| cam_address_line3 | string | No | The Beneficiaries Address Line 3 |
| cam_city | string | Yes | The Beneficiaries City or Town |
| cam_county | string | No | The Beneficiaries County |
| cam_country | string | No | The Beneficiaries Country of Residence |
| cam_postcode | string | Yes | The Beneficiaries Postcode |
Get All Beneficiaries
GET https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/cam_nominationofbeneficiaries HTTP/1.1
Host: https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/
Authorization: Bearer AuthorizationTokenHere
string address = "https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/cam_nominationofbeneficiaries";
using (WebClient webClient = new WebClient())
{
webClient.Headers.Add("Authorization", "Bearer AuthorizationTokenHere");
try
{
string contacts = webClient.DownloadString(address);
}
catch (Exception e)
{
// Exception logic here
}
}
The above command returns JSON structured like this:
"@odata.context": "https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/$metadata#cam_nominationofbeneficiaries",
"value": [
{
"@odata.etag": "W/\"79318879\"",
"_cam_memberapplication_value": "cff27adf-19a2-ea11-a812-000d3a86d63e",
"cam_postcode": "BS6 5TF",
"createdon": "2020-05-30T02:04:20Z",
"cam_nominationofbeneficiaryid": "d0f27adf-19a2-ea11-a812-000d3a86d63e",
"modifiedon": "2020-05-30T02:04:27Z",
"cam_beneficiarystatus": 1,
"cam_percentageoffund": 100.0000000000,
"cam_country": "GB",
"cam_nameofbeneficiary": "M Yo Da",
"cam_address_line1": "1 Forest Street",
"cam_address_line3": "Dagobah",
"_cam_schememember_value": "edf27adf-19a2-ea11-a812-000d3a86d63e",
"cam_nominationdate": "2020-05-29T23:00:00Z",
"cam_relationship": "Jedi Master",
"cam_address_line2": null,
"cam_city": null,
"cam_county": null
},
{
"@odata.etag": "W/\"81153666\"",
"_cam_memberapplication_value": "cadd7c2c-7ea6-ea11-a812-000d3a86d63e",
"cam_postcode": "WS14 9ET",
"createdon": "2020-06-04T16:12:24Z",
"cam_nominationofbeneficiaryid": "cbdd7c2c-7ea6-ea11-a812-000d3a86d63e",
"modifiedon": "2020-06-04T16:12:26Z",
"cam_beneficiarystatus": 1,
"cam_percentageoffund": 100.0000000000,
"cam_country": "GB",
"cam_nameofbeneficiary": "Mr Ben Ficiary",
"cam_address_line1": "Waverly Court",
"cam_address_line3": "Lichfield",
"_cam_schememember_value": "cedd7c2c-7ea6-ea11-a812-000d3a86d63e",
"cam_nominationdate": "2020-06-03T23:00:00Z",
"cam_relationship": "Relation",
"cam_address_line2": "Wiltell Road",
"cam_city": null,
"cam_county": null
}]
This endpoint retrieves all Beneficiaries.
HTTP Request
GET https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/cam_nominationofbeneficiaries
Get Beneficiary
GET https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/cam_nominationofbeneficiaries(d0f27adf-19a2-ea11-a812-000d3a86d63e) HTTP/1.1
Host: https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/
Authorization: Bearer AuthorizationTokenHere
string address = "https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/cam_nominationofbeneficiaries(d0f27adf-19a2-ea11-a812-000d3a86d63e)";
using (WebClient webClient = new WebClient())
{
webClient.Headers.Add("Authorization", "Bearer AuthorizationTokenHere");
try
{
string contacts = webClient.DownloadString(address);
}
catch (Exception e)
{
// Exception logic here
}
}
The above command returns JSON structured like this:
{
"@odata.context": "https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/$metadata#cam_nominationofbeneficiaries/$entity",
"@odata.etag": "W/\"79318879\"",
"_cam_memberapplication_value": "cff27adf-19a2-ea11-a812-000d3a86d63e",
"cam_postcode": "BS6 5TF",
"createdon": "2020-05-30T02:04:20Z",
"cam_nominationofbeneficiaryid": "d0f27adf-19a2-ea11-a812-000d3a86d63e",
"modifiedon": "2020-05-30T02:04:27Z",
"cam_beneficiarystatus": 1,
"cam_percentageoffund": 100.0000000000,
"cam_country": "GB",
"cam_nameofbeneficiary": "M Yo Da",
"cam_address_line1": "1 Forest Street",
"cam_address_line3": "Dagobah",
"_cam_schememember_value": "edf27adf-19a2-ea11-a812-000d3a86d63e",
"cam_nominationdate": "2020-05-29T23:00:00Z",
"cam_relationship": "Jedi Master",
"cam_address_line2": null,
"cam_city": null,
"cam_county": null
}
This endpoint retrieves an individual Beneficiary identified by their GUID.
HTTP Request
GET https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/cam_nominationofbeneficiaries(GUID)
URL Parameters
| Parameter | Description |
|---|---|
| GUID | The GUID of the Beneficiary to retrieve |
Transfers
Create Transfers
POST https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/cam_personalpolicies HTTP/1.1
Host: https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/
Authorization: Bearer AuthorizationTokenHere
Content-Type: application/json
{
"cam_uncrystalllisedtransfervalue": 20000.00,
"cam_crystallisedtransfervalue": 20000.00,
"cam_actualnonprtv": 20000.00,
"cam_policyno": "0027364",
"cam_providerid@odata.bind": "/accounts(6cb39c38-14e4-de11-883b-001517456d34)",
"cam_provideraddressline1": "The Share Centre",
"cam_provideraddressline2": "PO Box 2000",
"cam_provideraddressline3": "1 Forest Street",
"cam_providercity": "Aylesbury",
"cam_providercounty": "Buckinghamshire",
"cam_providerpostcode": "HP21 8ZB",
"as_nprschemeid@odata.bind": "/cam_schemes(d1f27adf-19a2-ea11-a812-000d3a86d63e)",
"cam_pensiontype": 14,
"cam_typeoftransfer": 0,
"cam_earmarking": 1,
"cam_sharing": 1,
"cam_splitting": 1,
"cam_crystallised": 0
}
The above command returns HTTP structured like this:
HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [Organization URI]/api/data/v9.1/cam_personalpolicies(3fe025c2-6490-ea11-a811-000d3a86d74d)
This endpoint creates a Transfer.
HTTP Request
POST https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/cam_personalpolicies
Fields
| Field | Type | Required | Descritpion |
|---|---|---|---|
| cam_providerid | Account Lookup | Yes | The Provider Account |
| cam_policyno | string | Yes | The Transfer reference number |
| as_nprschemeid | Scheme Lookup | No | The Scheme ID |
| cam_provideraddressline1 | string | Yes | The Providers Address line 1 |
| cam_provideraddressline2 | string | No | The Providers Address line 1 |
| cam_provideraddressline3 | string | No | The Providers Address line 1 |
| cam_providercity | string | Yes | The Providers City or Town |
| cam_providercounty | string | No | The Providers County |
| cam_providerpostcode | string | Yes | The Providers Post Code |
| cam_uncrystalllisedtransfervalue | decimal | Yes | Uncrystallised Transfer Value |
| cam_crystallisedtransfervalue | decimal | Yes | Crystallised Transfer Value |
| cam_actualnonprtv | decimal | Yes | Total Transfer Value |
| cam_typeoftransfer | int | Yes | Allowed Values ( Cash: 0, In Specie: 1 ) |
| cam_earmarking | int | Yes | Transfer Earmarking Order - Allowed Values ( No: 0, Yes: 1 ) |
| cam_sharing | int | Yes | Transfer Sharing Order - Allowed Values ( No: 0, Yes: 1 ) |
| cam_splitting | int | Yes | Transfer Splitting Order - Allowed Values ( No: 0, Yes: 1 ) |
| cam_crystallised | int | No | Is the Transfer Crystallised, Capped or Flex Access - Allowed Values ( No: 0, Yes: 1 ) |
| cam_pensiontype | int | Yes* | Allowed Values ( Additional Voluntary Contribution: 1, Annuity: 2, APPP - Protected Rights: 3, Bulk Buy-Out Plan: 4, Contracted In Money Purchase: 5, Contracted Out Money Purchase: 6, Drawdown: 7, Executive Personal Pension: 8, Final Salary Scheme: 9, Free Standing Additional Voluntary Contribution: 10, Group Personal Pension: 11, Group Stakeholder Pension: 12, Other: 13 Personal Pension Plan: 14, QROPS: 15, Retirement Annuity Contract: 16, Section 32 Policy Buy Out Bond: 17, Self Invested Personal Pension: 18, Small Self Administered Scheme: 19, Stakeholder: 20 ) |
Get All Transfers
GET https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/cam_personalpolicies HTTP/1.1
Host: https://cliftonassetdev.crm11.dynamics.com/api/data/v9.1/
Authorization: Bearer AuthorizationTokenHere
Errors
The Kittn API uses the following error codes:
| Error Code | Meaning |
|---|---|
| 400 | Bad Request -- Your request is invalid. |
| 401 | Unauthorized -- Your API key is wrong. |
| 403 | Forbidden -- The kitten requested is hidden for administrators only. |
| 404 | Not Found -- The specified kitten could not be found. |
| 405 | Method Not Allowed -- You tried to access a kitten with an invalid method. |
| 406 | Not Acceptable -- You requested a format that isn't json. |
| 410 | Gone -- The kitten requested has been removed from our servers. |
| 418 | I'm a teapot. |
| 429 | Too Many Requests -- You're requesting too many kittens! Slow down! |
| 500 | Internal Server Error -- We had a problem with our server. Try again later. |
| 503 | Service Unavailable -- We're temporarily offline for maintenance. Please try again later. |