NAV
http csharp

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 AuthorizationTokenHere with 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.