WealthOS API (v1)

Download OpenAPI specification:Download

Welcome to WealthOS. Here you will find the comprehensive set of information you need to rapidly build rich digital wealth management features.

Getting Started

Before you start developing your features using the WealthOS API, please make sure that the following steps are complete:

  • Set-up your own environment unique to your organisation using the link we have provided
  • Follow the step-by-step guide to configuring your environment
  • Sign-up and obtain keys for sandbox environments of all 3rd party integrations you require from the market place of available integrations in WealthOS
  • Setup the keys of the 3rd party integrations within the WealthOS Admin UI

Once you have set yourself up, you can add other users who will be able to collaborate with you.


WealthOS API Basics

The WealthOS API is a RESTful API that provides synchronous communication between your application and the WealthOS platform. For some calls where WealthOS communicates with a 3rd party application (e.g. KYC providers, Payment providers, Custodians) thus causing asynchronicity in communication, WealthOS also provides anebsocket API so you do not have to build a polling function to retrieve responses.

Your API URLs will be in the following formats:

RESTful API - https://{unique_tenancy_identifier}.sandbox.wealthos.cloud/tenant/{endpoint}/v1

E.g. https://acorn-gb.sandbox.wealthos.cloud/investors/v1

Websocket API - wss://{unique_tenancy_identifier}-ws.sandbox.wealthos.cloud/ws/

E.g. wss://acorn-gb-ws.sandbox.wealthos.cloud/ws/

The Websocket API is used by WealthOS to push asynchronous notifications to your application.


Authentication

The wealth management organisation is granted a secret key that they must use in their API calls to interact with the WealthOS platform securely. This key must be stored securely only in your application server side code. It grants the highest level of access privileges to the WealthOS platform.

Testing your keys

You may test your keys by calling on the following endpoints.

RESTful API

To test the secret key: Perform a GET call on ~/tenant/test/hello-world-be

Socket API

In order to authenticate a Websocket API call, a query parameter x-token must be included within the URL.

x-token = your organisation’s secret key

Full URL must read as follows:

wss://{unique_tenancy_identifier}-ws.sandbox.wealthos.cloud/ws?x-token=<api_secret_key>

Idempotency

Some of the capabilities exposed via WealthOS tenant API needs to be idempotant (from the perspective of the system). For those requests an additional field request_id is required to be sent with the request. The purpose of the request_id is to give an unique ID for the request, so the system can differentiate requests. Advantage of the request_id is the system can check whether the request have already reached the system. If a request (that should be idempotant) has already reached the system, the duplicate request will be rejected.

Sample response


{
  "status": 400,
  "body": {
    "message" : "duplicate request", 
    "status" : "COMPLETE|PROCESSING", 
    "response" : "<stringified original response body>"
  }
}

The request_id stored for idempotency checks will be deleted after 1 hour after which point a message with the same request_id will be considered as a new request.


Entity Versioning

WealthOS maintains versioning for reference data entities stored within the platform which can be updated by the Wealth Manager BE. This is to ensure integrity of data in the event the same entity is being updated by multiple users via the API.

When requesting for an entity via the API the system will return the latest reference_version which must be provided when the Wealth Manager BE is updating an entity. If the received reference_version is different to the latest reference_version in the system, the update will be rejected.

With each sucessful update done to the entity via the API the system will increment the reference_version.


Limits

Currently there are limits to the number of requests that can be made to the WealthOS API. Following are these limits:

  • Average requests per second 500
  • Burst requests 1000
  • Total requests per day 10,000

FAQ

  • How do I see my API keys and how do I re-new the keys?

    • Your API keys are displayed in the developer section of the WOS Admin GUI. You have to be of user type 'developer' or 'admin' to see this.
  • Is it mandatory to connect to the web socket

    • Right now this is optional. However it is highly recommended to do so, because the wealth manager BE can avoid polling (Remember: the REST API calls have a daily quota) for certain important events.

Socket API

Intro

Web socket API is used by the WOS system to notify (push) asynchronous events to the Wealth Manager BE

Accessing the socket API

Your Socket API URL would be wss://{socket api root}/ws

For example lets assume your env is gb and tenant ID is acorn. Then,

  • Socket API Root: acorn-gb-ws.sandbox.wealthos.cloud

  • Socket API URL: wss://acorn-gb-ws.sandbox.wealthos.cloud/ws

Authenticating socket connection

WealthOS requires to authenticate the web socket connection before allowing you to communicate with the system through the socket. For that purpose WealthOS socket API expects a query parameter x-token to be attached with the socket URL.

x-token is the ApiSecretKey given you by the WealthOS system

So the actual connection URL must look like

wss://acme-gb-ws.sandbox.wealthos.cloud/ws?x-token=<api_secret_key>

Channels

WealthOS socket api uses the concept of channels to group messages exchanged through web socket. A single socket connection may be used to handle one or many channels. Users are advised to implement a proper load balancing scheme.

Messages sent via the channels will be strictly ordered by the event generation time. However, there is no guarantee of ordering messages across channels.

A generic data message passed through the socket looks like,

{
    type: "a string tag that identifies the message"
    resend: "[optional] Indicates whether this is a resend message. Resends can be sent during explicit recovery servicing or due to server recovering from errors"
    ch: "channel name" 
    payload: { 
        .... 
    }
    id: "unique ID for this message"
    ts: "unique sequence number of message"
    
}

Note: The unique sequence number ts is a strictly monotonically increasing timestamp (milliseconds elapsed since January 1, 1970, 00:00:00 UTC). This is unique per channel.

Subscribe

Sent from client to server to subscribe to a channel.

  • Channel name should be specified in the ch attribute.
  • Unique request ID must be sent in the req_id attribute.
{
    "type": "subscription",
    "ch": "channel to be subscribed",
    "req_id": "request ID",
    "from_ts": past sequence number / Timestamp value (milliseconds)
}

Server responds with a subscribe message which echoes the request. In addition, a status field indicates the subscription status (success or failed) and aneason field indicating the reason in the case of a failure.

{
    "type": "subscription",
    "ch": "subscribed channel",
    "req_id": "request ID",
    "status": "ACK"
}
{
    "type": "subscription",
    "ch": "subscribed channel",
    "req_id": "request ID",
    "status": "NACK",
    "reason": "Error Message"
}

Unsubscribe

Sent from client to server to unsubscribe from a channel.

  • Channel name should be specified in the ch attribute.
  • Unique request ID must be sent in the req_id attribute.
{
    "type": "unsubscription",
    "ch": "channel to be unsubscribed",
    "req_id": "request ID"
}

Server responds with a unsubscribe message which echoes the request. In addition, a status field indicates the unsubscription status (success or failed) and aneason field indicating the reason in the case of a failure.

{
    "type": "unsubscription",
    "ch": "channel to be unsubscribed",
    "req_id": "request ID",
    "status": "ACK"
}
{
    "type": "unsubscription",
    "ch": "channel to be unsubscribed",
    "req_id": "request ID",
    "status": "NACK",
    "reason": "Error Message"
}

NOTE

  • Subscribing to an already subscribed channel will be rejected.
  • Client is expected to re-try, if no response is received within 60 secs

Heart beats

The ws client must send a 'heart-beat' to the server every 60 seconds to keep the socket connection alive. Server will reply back with heat-beat (HB). Server will disconnect the ws connection if no HBs are recived for 3 HB intervals (i.e. between 2 to 3 minutes). Client should also disconnet if no data or hb message is received for 3 minutes

{
    "type": "hb",
    "ch": "system"
}

A live socket connection will be automatically disconnected by the server after 2 hours

Recover missed updates

The ws client can send a past sequence number with the subscription to receive missed updates from the provided sequence number onwards.

{
    "type": "subscription",
    "ch": "channel to be subscribed",
    "req_id": "request ID",
    "from_ts": "past sequence number"
}

Server responds with a subscribe message which echoes the request. Then the ws client will receive past socket updates from the provided sequence number onwards.

{
    "type": "subscription",
    "ch": "subscribed channel",
    "req_id": "request ID",
    "status": "ACK",
    "from_ts": 1625660972000
}
{
    "type": "investor_status",
    "ch": "investors",
    "payload": {
        "investor_id" : "<investor_id>",
        "status" : "'fail' | 'success'", 
        "error" : "",  
        "event": "'kyc.started' | 'kyc.completed'" 
    },
    "id": "fd232671-d47b-4ae2-a4c4-0a37258ffae5",
    "ts": 1625660972222,
    "resend": true
}

NOTE

  • If the provided sequence number equals -1, Then the system will send all the past socket updates to the client.
  • System only accepts integer type sequence number values.

Supported channels

  • investors
  • payments
  • transactions
  • holdings
  • reconciliations
  • notifications

publish investors

This channel publishes investor related updates.

Message

The investor channel publishes the following message types:

  • investor_status : This message type is used to communicate updates to the KYC/AML status of an investor
Payload
Name Type Description Accepted values
type string message type investor_status
ch string channel name investors
payload.investor_id string unique ID of investor
payload.status string fail , success
payload.error string error text. Populated only on failure
payload.event string KYC status. Populated only if request is sucessful kyc.started, kyc.completed
Examples
{
    "type": "investor_status",
    "ch": "investors",
    "payload": {
        "investor_id" : "inv-XUT11265",
        "status" : "success", 
        "error" : "",  
        "event": "kyc.completed" 
    },
    "id": "fd232671-d47b-4ae2-a4c4-0a37258ffae5",
    "ts": 1625660972222
}

publish payments

This channel publishes payment status related updates

Message

The payments channel publishes the following message types:

  • payment_update : This message type is used to communicate updates to the status of the payment.
  • bulk_payment_update : This message type is used to communicate updates to the status of the bulk payment.

Payment update message

Payload
Name Type Description Accepted values
type string payment_update
ch string payments
payload.transaction_id string Unique ID of the payment
payload.pot_id string ID of the pot the payment is directed to
payload.reason string This field populated only when payment intent status is failed or cancelled, with reason for cancellation or failure
payload.status string pending_confirmation, processing, succeeded, cancelled, failed
Examples
{
    "type": "payment_update",
    "ch": "payments",
    "payload": {
        "transaction_id" : "80784c92-8f9d-4150-b83c-dc",
        "pot_id" : "pot-GYQ5423100",
        "status" : "succeeded"
    },
    "id": "fd232671-d47b-4ae2-a4c4-0a37258ffae5",
    "ts": 1625660972222
}

Bulk payment update message

Payload
Name Type Description Accepted values
type string bulk_payment_update
ch string payments
payload.batch_id string Unique ID of the bulk payment
payload.status string pending, payments_creation_failed, payments_created, payments_settlement_in_progress, payments_settled, payments_partially_settled, payments_settlement_failed, processing
payload.erroneous_payments object Information of payments in the batch that cannot be accepted
payload.fields.payment_id string Unique ID of the individual payment
payload.fields.error string Reason for failure or rejection of the individual payment
Examples
{
    "type": "bulk_payment_update",
    "ch": "payments",
    "payload": {
        "batch_id" : "BULKPAY-HSVY5840",
        "status" : "payments_created"
    },
    "id": "fd232671-d47b-4ae2-a4c4-0a37258ffae5",
    "ts": 1625660972222
}

publish transactions

This channel publishes various transaction related updates.

Message

The transactions channel publishes the following message types:

  • transaction_initiated : This message type is used to communicate a new transaction created within the system (e.g. a scheduled fee deduction, individual transactions of a portfolio rebalance etc.)
  • transaction_updated : This message type is used to communicate an update to a transaction.
  • external_transaction_added : This message type is used to communicate a new transaction created in the system via an external party (e.g. transaction created by a custodian).
  • transaction_failed : This message type is used to notify the user of a transaction failure.
Payload

For further information regarding the description of fields in the payload, mandatory fields and conditionally returned fields etc. please refer GET pending & past transactions of a pot.

Name Type Description Accepted values
type string transaction_updated,transaction_initiated,external_transaction_added
ch string transactions
payload.transaction_id string Unique ID of the transaction
payload.parent_transaction_id string Parent Transaction ID
payload.external_transaction_reference string External Transaction Reference
payload.pot_id string Pot ID of the transaction
payload.investment_product_id string Invetment Prouct ID or cash
payload.client_order_id string (Optional) Order identifier assigned by the wealth manager
payload.primary_transaction_type string Primary Transaction Type Fees,Buy,Sell,Transfers,Income,Tax,Contribution,Withdrawal,Corporate actions
payload.sub_transaction_type string Sub Transaction Type Dividend Reinvestment,Interest Reinvestment,Reinvestment,Buy,Sell Cancel,Switch Buy,Sell,Buy Cancel,Switch Sell,Lump sum, Lump sum - non relievable, Employer contribution,Employee contribution,Regular contribution, Regular contribution - non relievable, Regular contribution - Employer, Payment in for fees,Internal Transfer - Cash In,Internal Transfer - Stock In,Internal Transfer - Cash Out,Internal Transfer - Stock Out,Stock Transfer In,Cash Transfer In,Stock Transfer Out,Cash Transfer Out,Commission,Ancillary fee,Management fee,Fee credit,Fee rebate,Advisor ongoing fee,One-off advisor fee,Commission rebate,Custody fees,Dividends,Distributions,Interest,Other income,Takeovers, Mergers & Name Changes - Create,Takeovers, Mergers & Name Changes - Extinguish,Rights Expiry,Rights Exercise,Warrant Exercise,Fixed Income Maturity - Receive Capital, Fixed Income Maturity - Extinguish Bond Units,Fund Merger - Create New Fund Units,Fund Merger - Extinguish Old Fund Units,Rights Issue,Stock Dividend,Spin-Off,Warrant Issue,Stock Split,Fee Tax,Tax Relief,GST,HST,PST,QST,Withholding Tax,PAYE Tax,Non-resident Tax,Penalty,Contribution Refund,Income Withdrawal,Reversal,Withdrawal,Miscellaneous Corporate Action Exercise - Buy,Miscellaneous Corporate Action Exercise - Sell, Contribution Bonus, Fee Sell
payload.type string Type of the transaction pending,archived
payload.sub_type string Sub type of the transaction instructed,confirmed,priced,rejected,settled,cancelled, scheduled, ready_to_submit, submitted, failed
payload.currency string Currency of the pot
payload.direction string Direction of the transaction in,out
payload.transaction_quantity string Quantity of the investment product transaction. This will be empty for cash transactions
payload.transaction_value string Value of the transaction
payload.execution_price string Executed price of the buy, sell transaction
payload.trade_date date Will indicate the date where this transaction was effected
payload.settlement_date date Intendent settlement date of the pending transaction or actual the settled day of the transaction
payload.created_at time Transaction created date
payload.updated_at time Transaction last updated date
payload.additional_external_details Object Additional external details of the transaction, This may be populated in reconciliation process
payload.origin string Origin of the transaction api, admin_ui, file_upload, system
payload.source_id string transactions created for payments intents - employer contributions for SIPP Accumulation Products
payload.reason string This field populated only when status is failed or canceled, with reason for cancellation or failure
Examples
{
    "type": "transaction_updated",
    "ch": "transactions",
    "object": {
         "pot_id":"pot-GYQ5423100",
         "transaction_id":"80784c92-8f9d-4150-b83c-dc",
         "investment_product_id":"GB0000495209",
         "primary_transaction_type":"Buy",
         "sub_transaction_type":"Buy",
         "type":"archived",
         "sub_type":"settled",
         "currency":"GBP",
         "direction":"in",
         "transaction_quantity":"20",
         "transaction_value":"129.69",
         "execution_price":"6.45",
         "trade_date":"2021-08-06",
         "settlement_date":"2021-08-06",
         "origin": "admin_ui",
         "source_id": "cem-ASP43560",
         "created_at":"2021-08-06T09:25:44.251Z",
         "updated_at":"2021-08-06T09:27:18.003Z",
         "external_transaction_reference": "117709248888833"
     },
    "id":"8e754ef9-5d63-4c2a-9f43-ac42f588e122",
    "ts":1628244517263
}

publish holdings

This channel publishes holdings related updates.

Message

The holdings channel publishes the following message types:

  • holding_updated : This message type is used to communicate an update to the units of an investment product holding, or value of a cash holding.
Payload

For further information regarding the description of fields in the payload, mandatory fields and conditionally returned fields etc. please refer GET current holdings of a pot.

Name Type Description Accepted values
type string holding_updated
ch string holdings
payload.pot_id string ID of the pot the payment is directed to
payload.investment_product_id string Investment product ID or 'cash' for cash
payload.currency string Currency of the pot
payload.total_quantity string Total Quantity of the investment product holding. This value is empty for cash holdings
payload.free_quantity string Free Quantity of the investment product holding. This value is empty for cash holdings
payload.locked_quantity string Locked Quantity of the investment product holding. This value is empty for cash holdings
payload.total_value string Total Value of the holding
payload.free_value string Free Value of the holding
payload.locked_value string Locked Value of the holding
payload.investment_product_name string Name of the investment product
payload.price string Price of the holding
payload.price_date time The time which the price is updated
payload.average_book_cost string Per-unit book cost for a particular holding (applicable for investment product holdings only)
payload.cost_of_holding string Total book cost for the total units currently held within the pot (applicable for investment product holdings only)
payload.settled_cash_position string Settled cash amount within the pot (applicable for cash holdings only)
payload.additional_external_details Object Additional external details of the holding, This may be populated in reconciliation process
Examples
{
    "type": "holding_updated",
    "ch": "holdings",
    "payload": {
         "pot_id":"pot-GYQ5423100",
         "investment_product_id":"GB0000495209",
         "currency":"GBP",
         "total_quantity":"20",
         "free_quantity":"20",
         "locked_quantity":"0",
         "total_value":"137.358",
         "free_value":"137.358",
         "locked_value":"0",
         "investment_product_name":"BlackRock European Dynamic Fund A Accumulation",
         "price":"6.8679",
         "price_date":"2021-08-06T09:27:37.512Z",
         "average_book_cost": "5",
         "cost_of_holding": "100"        
    },
    "id":"8e754ef9-5d63-4c2a-9f43-ac42f588e122",
    "ts":1628244517263
}

publish reconciliations

The reconciliations channel publishes the following message types:

  • investor_summary : This message type is used to communicate a summary of investor reconciliation process.
  • investor_mismatch : This message type is used to communicate all mismatches in each investor reconciliations process.
  • pot_summary : This message type is used to communicate a summary of pot reconciliation process.
  • pot_mismatch : This message type is used to communicate all mismatches in each pot reconciliations process.
  • transaction_summary : This message type is used to communicate a summary of transaction reconciliation process.
  • transaction_mismatch : This message type is used to communicate mismatches in each transaction reconciliations process.
  • transaction_ingestion_failure : This message type is used to communicate ingestion failures in each transaction reconciliations process.
  • transaction_ignored : This message type is used to communicate all ignored transactions in each transaction reconciliations process.
  • holdings_summary : This message type is used to communicate a summary of holding reconciliation process.
  • holdings_mismatch : This message type is used to communicate all mismatches in each holding reconciliations process.

Investor summary message

Payload
Name Type Description Accepted values
type
Required
string investor_summary
ch
Required
string reconciliations
payload.job_id
Required
string Unique ID of reconciliation process
payload.job_name
Required
string type of reconciliations
payload.date
Required
string date and time
payload.total_records
Required
number total record count
payload.mismatched_records
Required
number mismatched record count
payload.incoming_records
Required
number incoming record count
payload.no_incoming_records
Required
number no incoming record count
Examples
{
    "type":"investor_summary",
    "ch":"reconciliations",
        "payload":
        {
            "job_id":"hydrangea-dc-210806-1628240463777",
            "job_name":"Investor Details",
            "date":"2021-08-09T06:49:34.227Z",
            "total_records":1,
            "mismatched_records":1,
            "incoming_records": 0,
            "no_incoming_records": 0
        },
    "id":"e1c7797f-f590-4490-a452-01894b33d014",
    "ts":1628244517823
}

Investor mismatch message

Payload
Name Type Description Accepted values
type
Required
string investor_mismatch
ch
Required
string reconciliations
payload.job_id
Required
string Unique ID of reconciliation process
payload.date
Required
string date and time
payload.record_id
Required
string unique ID of a record
payload.investor_id string unique ID of the investor being reconciled (if available)
payload.record_status
Required
string record status reconciled, unreconciled, not_found, key_unavailable
payload.fields object mismatched fields with field, incoming_value, available_value and status
payload.fields.field
Required
string Name of the fields
payload.fields.incoming_value string Incoming value for the field
payload.fields.available_value string Available value for the field
payload.fields.status string status of the field mismatched, matched
Examples
{
    "type":"investor_mismatch",
    "ch":"reconciliations",
    "payload":
    {
        "job_id":"hydrangea-dc-210806-1628240463777",
        "date":"2021-08-09T06:49:34.227Z",
        "record_id":"F180010Q",
        "record_status":"not_found",
        "fields":
        [
            {"field":"first_name","incoming_value":"David","available_value": "Dane", "status":"mismatched"},
            {"field":"last_name","incoming_value":"Brown", "available_value": "Black", "status":"mismatched"}
        ]
    },
    "id":"8e754ef9-5d63-4c2a-9f43-ac42f588e122",
    "ts":1628244517263
}

Pot summary message

Payload
Name Type Description Accepted values
type
Required
string pot_summary
ch
Required
string reconciliations
payload.job_id
Required
string Unique ID of reconciliation process
payload.job_name
Required
string type of reconciliations
payload.date
Required
string date and time
payload.total_records
Required
number total record count
payload.mismatched_records
Required
number mismatched record count
payload.incoming_records
Required
number incoming record count
payload.no_incoming_records
Required
number no incoming record count
Examples
{
    "type": "pot_summary",
    "ch": "reconciliations",
    "payload": {
        "job_id": "dev14_recon_pot_200",
        "job_name": "Pot Details",
        "date": "2021-09-02T10:07:40.578Z",
        "total_records": 91,
        "mismatched_records": 41,
        "incoming_records": 0,
        "no_incoming_records": 0
    },
    "id": "c574d276-de4b-4014-80f3-80e54d31d3da",
    "ts": 1630577304480
}

Pot mismatch message

Payload
Name Type Description Accepted values
type
Required
string pot_mismatch
ch
Required
string reconciliations
payload.job_id
Required
string Unique ID of reconciliation process
payload.date
Required
string date and time
payload.record_id
Required
string unique ID of a record
payload.pot_id string unique ID of the pot being reconciled (if available)
payload.record_status
Required
string record status reconciled, unreconciled, not_found, key_unavailable
payload.fields object mismatched fields
payload.fields.field
Required
string Name of the fields
payload.fields.incoming_value string Incoming value for the field
payload.fields.available_value string Available value for the field
payload.fields.status string status of the field matched, mismatched
Examples
{
    "type": "pot_mismatch",
    "ch": "reconciliations",
    "payload": {
        "job_id": "dev14_recon_pot_200",
        "date": "2021-09-02T10:07:40.578Z",
        "record_id": "53_RWM",
        "record_status": "not_found",
        "fields": [
            {"field": "custodian_account_reference","incoming_value": "F3A0023Q","status": "mismatched"},
            {"field": "pot_currency","incoming_value": "GBP","status": "mismatched"}
 
        ]
    },
    "id": "7722f072-4e8d-48ec-ad4f-4543e64fb536",
    "ts": 1630577304156
}

Transaction summary message

Payload
Name Type Description Accepted values
type
Required
string transaction_summary
ch
Required
string reconciliations
payload.job_id
Required
string Unique ID of reconciliation process
payload.job_name
Required
string Name of the reconciliations job
payload.date
Required
string date and time
payload.total_records
Required
number total record count
payload.mismatched_records
Required
number mismatched record count
payload.updated_records
Required
number updated record count
payload.unable_to_ingest
Required
number ingestion failed record count
payload.ignored_records
Required
number ignored record count
payload.incoming_records
Required
number incoming record count
payload.no_incoming_records
Required
number no incoming record count
Examples
{
    "type": "transaction_summary",
    "ch": "reconciliations",
    "payload": {
        "job_id": "dev10_cat_inv_178",
        "job_name": "Transaction Details",
        "date": "2021-08-18T09:08:27.171Z",
        "total_records": 8,
        "mismatched_records": 1,
        "updated_records": 4,
        "unable_to_ingest": 1,
        "ignored_records": 1,
        "incoming_records": 7,
        "no_incoming_records": 1
    },
    "id": "7d3614c7-3f63-4930-88df-062c5059047d",
    "ts": 1629277726128
}

Transaction mismatch message

Payload
Name Type Description Accepted values
type
Required
string transaction_mismatch
ch
Required
string reconciliations
payload.job_id
Required
string Unique ID of reconciliation process
payload.date
Required
string date and time
payload.record_id
Required
string unique ID of a record
payload.external_transaction_reference string External transaction reference (if available)
payload.transaction_ids object Transaction IDs of mismatched records (if available)
payload.pot_id string Pot ID of the transaction (if available)
payload.record_status
Required
string record status unreconciled,not_found,key_unavailable, multiple_found, no_incoming_record, updated
payload.fields object mismatched fields
payload.fields.field
Required
string Name of the fields
payload.fields.incoming_value string Incoming value for the field
payload.fields.available_value string Available value for the field
payload.fields.status string status of the field matched, mismatched, key_value_missing
Examples
{
    "type":"transaction_mismatch",
    "ch":"reconciliations",
    "payload":{"job_id":"peony-transaction_reconciliations-1630493472846",
    "date":"2021-09-01T10:51:18.577Z",
    "record_id":"2_RWM",
    "external_transaction_reference":"117709248888833",
    "transaction_ids": [ "80784c92-8f9d-4150-b83c-dc" ],
    "pot_id":"pot-GYQ5423100",
    "record_status":"unreconciled",
    "fields":[
    {
        "field":"primary_transaction_type",
        "incoming_value":"Buy",
        "available_value":"Corporate actions",
        "status":"mismatched"
    },
    {
        "field":"sub_transaction_type",
        "incoming_value":"Buy",
        "available_value":"Stock Split",
        "status":"mismatched"
    },
    {
        "field":"execution_price",
        "incoming_value":null,
        "status":"mismatched"
    },
    {
        "field":"trade_date",
        "incoming_value":"2021-08-31",
        "status":"mismatched"
    },
    {
        "field":"settlement_date",
        "incoming_value":"2021-09-02",
        "status":"mismatched"
    }
    ]
},
    "id":"0b3aa3b1-b14c-44ee-ac47-656149645ba9",
    "ts":1630493491292
}

Transaction ingestion failure message

Payload
Name Type Description Accepted values
type
Required
string transaction_ingestion_failure
ch
Required
string reconciliations
payload.job_id
Required
string Unique ID of reconciliation process
payload.date
Required
string date and time
payload.record_id
Required
string unique ID of a record
payload.external_transaction_reference string External transaction reference
payload.pot_id string Pot ID of the transaction (if available)
payload.record_status
Required
string record status unable_to_ingest
payload.fields
Required
object fields
payload.fields.field
Required
string Name of the fields
payload.fields.incoming_value
Required
string Incoming value for the field
payload.fields.status
Required
string status of the field unrecognised, key_value_missing
Examples
{
    "type": "transaction_ingestion_failure",
    "ch": "reconciliations",
    "payload": {
        "job_id": "peony-transaction_reconciliations-1630657432163",
        "date": "2021-09-03T08:23:54.373Z",
        "record_id": "3_RWM",
        "external_transaction_reference": "331738147053699",
        "record_status": "unable_to_ingest",
        "fields": [
            {
                "field": "custodian_account_reference",
                "incoming_value": "F3A0000A",
                "status": "unrecognised"
            },
            {
                "field": "pot_currency",
                "incoming_value": "GBP",
                "status": "unrecognised"
            },
            {
                "field": "investment_product_id",
                "incoming_value": "CA1358251",
                "status": "unrecognised"
            }
        ]
    },
    "id": "718f9758-e2b0-4a07-9cc6-8a6cb5aae419",
    "ts": 1630657439928
}

Transaction ignored failure message

Payload
Name Type Description Accepted values
type
Required
string transaction_ignored
ch
Required
string reconciliations
payload.job_id
Required
string Unique ID of reconciliation process
payload.date
Required
string date and time
payload.record_id
Required
string unique ID of a record
payload.record_status
Required
string record status ignored
Examples
{
    "type": "transaction_ignored",
    "ch": "reconciliations",
    "payload": {
        "job_id": "peony-transaction_reconciliations-1630657867836",
        "date": "2021-09-03T08:31:08.191Z",
        "record_id": "3_RWM",
        "record_status": "ignored"
    },
    "id": "8a82df6b-d34a-4eb9-91a1-b98cd18aa4e2",
    "ts": 1630657913417
}    

Holding summary message

Payload
Name Type Description Accepted values
type
Required
string holdings_summary
ch
Required
string reconciliations
payload.job_id
Required
string Unique ID of reconciliation process
payload.job_name
Required
string type of reconciliations
payload.date
Required
string date and time
payload.total_records
Required
number total record count
payload.mismatched_records
Required
number mismatched record count
payload.incoming_records
Required
number incoming record count
payload.no_incoming_records
Required
number no incoming record count
Examples
{
    "type":"holdings_summary",
    "ch":"reconciliations",
        "payload":
        {
            "job_id":"cat-holding_reconciliations-1631619829926",
            "job_name":"Holdings Details",
            "date":"2021-08-09T06:49:34.227Z",
            "total_records":10,
            "mismatched_records":5,
            "incoming_records": 0,
            "no_incoming_records": 0
        },
    "id":"e1c7797f-f590-4490-a452-01894b33d014",
    "ts":1628244517823
}

Holding mismatch message

Payload
Name Type Description Accepted values
type
Required
string holding_mismatch
ch
Required
string reconciliations
payload.job_id
Required
string Unique ID of reconciliation process
payload.date
Required
string date and time
payload.record_id
Required
string unique ID of a record
payload.pot_id string unique ID of the pot being reconciled (if available)
payload.investment_product_id string unique ID of the investment product being reconciled (if available)
payload.record_status
Required
string record status reconciled, unreconciled, not_found, key_unavailable
payload.fields object mismatched fields with field, incoming_value, available_value and status
payload.fields.field
Required
string Name of the fields
payload.fields.incoming_value string Incoming value for the field
payload.fields.available_value string Available value for the field
payload.fields.status string status of the field mismatched, matched, updated
Examples
{
    "type":"holding_mismatch",
    "ch":"reconciliations",
    "payload":
    {
        "job_id":"cat-holding_reconciliations-1631619829926",
        "date":"2021-08-09T06:49:34.227Z",
        "record_id":"RWM_9_sr",
        "pot_id": "pot-GYQ5423100",
        "investment_product_id": "pqr",
        "record_status":"not_found",
        "fields":
        [
            {"field":"custodian_account_reference","incoming_value":"F180010Q","status":"mismatched"},
            {"field":"free_value","incoming_value":0, "status":"mismatched"}
        ]
    },
    "id":"8e754ef9-5d63-4c2a-9f43-ac42f588e122",
    "ts":1628244517263
}

publish notifications

This channel publishes general notifications.

Message

The notifications channel publishes the following message types:

  • recurring_contribution_activated : This message type is used to communicate activation of recurring contribution requests
  • recurring_contribution_cancelled : This message type is used to communicate cancellation of recurring contribution requests
  • recurring_contribution_rejected : This message type is used to communicate rejection of recurring contribution requests
  • recurring_contribution_authorization_url_received : This message type is used to communicate that the authorization url is received for the recurring contribution
  • recurring_contribution_resumed : This message type is used to communicate resuming of recurring contribution requests
  • recurring_contribution_finished : This message type is used to communicate completion of recurring contribution requests
  • recurring_contribution_updated : This message type is used to communicate updates (mandate transferr, mandate replacement) of recurring contribution requests
  • HMRC_LISA_investor_creation_failed : This message type is used to communicate rejection of HMRC LISA investor creation requests
  • HMRC_LISA_account_creation_failed : This message type is used to communicate rejection of HMRC LISA investor account creation requests
  • HMRC_LISA_account_creation_successful : This message type is used to communicate completion of HMRC LISA investor and account creation requests

Recurring contribution activation message

Payload
Name Type Description Accepted values
type
Required
string recurring_contribution_activated
ch
Required
string notifications
payload.status
Required
string Status of the recurring contribution
payload.contribution_name
Required
string User given identifier for the contribution
payload.pot_id
Required
string Pot ID of investor to direct the payment
payload.investor_id
Required
string Investor ID of the investor making the contribution
payload.amount
Required
string Amount as a numeral string with two decimal points
payload.sub_transaction_type
Required
string Sub transaction type for recurring contribution Regular contribution, Regular contribution - non relievable, Regular contribution - Employer
payload.currency
Required
string Currency configured for the pot
payload.payment_type
Required
string Type of payment
payload.service_provider
Required
string Service provider managing the recurring payment subscription
payload.purpose
Required
string Purpose of the recurring contribution cash, invest
payload.source_id string Only for payments intents for employer contributions made towards SIPP Accumulation Products
payload.payment_schedule
Required
object Parameters based on payment schedules
payload.payment_schedule.interval_unit
Required
string Repeating interval unit of recurring payment monthly
payload.payment_schedule.interval
Required
number Repeating interval of recurring payment
payload.payment_schedule.date number Date the payment is expected to be triggered if frequency is monthly
payload.payment_schedule.start_date
Required
string Date to initiate the recurring payments
payload.payment_schedule.end_date string Date to conclude the recurring payments, if count is not provided
payload.payment_schedule.count number No of recurring payments to trigger before concluding the payments, if an end date is not provided
payload.contribution_id
Required
string System generated unique ID
payload.service_provider_params
Required
object Parameters based on service provider
payload.service_provider_params.status
Required
string Status transitions depend on the service provider
payload.service_provider_params.reason
Required
string Reason for disabling/cancelling the contribution
Examples
{
    "type": "recurring_contribution_activated",
    "ch": "notifications",
    "payload": {
        "status": "Active",
        "contribution_name": "GIA contribution-1",
        "pot_id": "pot-XWL3805770",
        "investor_id": "inv-QRY29279",
        "amount": "1000060.12",
        "sub_transaction_type": "Regular contribution",
        "currency": "GBP",
        "payment_type": "direct_debit",
        "service_provider": "gocardless",
        "purpose": "cash",
        "payment_schedule": {
            "interval_unit": "monthly",
            "interval": 7,
            "date": 1,
            "start_date": "2024-04-02T00:00:00.000Z",
            "end_date": "2024-04-03T00:00:00.000Z"
        },
        "contribution_id": "RCB-GC-JSJ6709",
        "service_provider_params": {
            "status": "Subscription created",
            "authorization_reference" : "EV0159P7DZB2P6",
            "contribution_reference" : "BRQ00030E3DXA4P",
            "request_id" : "BRF00014ZXYN5V4F05M90GZEQCARE84K",
            "authorization_url": "https://authexample.gocardless-sandbox.com"
        }
    },
    "id": "952c7d0a-ecc6-4538-86f4-ad021f6855d0",
    "ts": 1683086449658,
    "resend": true
}

Recurring contribution cancellation message

Payload
Name Type Description Accepted values
type
Required
string recurring_contribution_cancelled
ch
Required
string notifications
payload.status
Required
string Status of the recurring contribution
payload.contribution_name
Required
string User given identifier for the contribution
payload.pot_id
Required
string Pot ID of investor to direct the payment
payload.investor_id
Required
string Investor ID of the investor making the contribution
payload.amount
Required
string Amount as a numeral string with two decimal points
payload.sub_transaction_type
Required
string Sub transaction type for recurring contribution Regular contribution, Regular contribution - non relievable, Regular contribution - Employer
payload.currency
Required
string Currency configured for the pot
payload.payment_type
Required
string Type of payment
payload.service_provider
Required
string Service provider managing the recurring payment subscription
payload.purpose
Required
string Purpose of the recurring contribution cash, invest
payload.source_id string Only for payments intents for employer contributions made towards SIPP Accumulation Products
payload.payment_schedule
Required
object Parameters based on payment schedules
payload.payment_schedule.interval_unit
Required
string Repeating interval unit of recurring payment monthly
payload.payment_schedule.interval
Required
number Repeating interval of recurring payment
payload.payment_schedule.date number Date the payment is expected to be triggered if frequency is monthly
payload.payment_schedule.start_date
Required
string Date to initiate the recurring payments
payload.payment_schedule.end_date string Date to conclude the recurring payments, if count is not provided
payload.payment_schedule.count number No of recurring payments to trigger before concluding the payments, if an end date is not provided
payload.contribution_id
Required
string System generated unique ID
payload.service_provider_params
Required
object Parameters based on service provider
payload.service_provider_params.status
Required
string Status transitions depend on the service provider
payload.service_provider_params.reason
Required
string Reason for disabling/cancelling the contribution
Examples
{
    "type": "recurring_contribution_cancelled",
    "ch": "notifications",
    "payload": {
        "status": "Cancelled",
        "contribution_name": "GIA contribution-1",
        "pot_id": "pot-XWL3805770",
        "investor_id": "inv-QRY29279",
        "amount": "1000060.12",
        "sub_transaction_type": "Regular contribution",
        "currency": "GBP",
        "payment_type": "direct_debit",
        "service_provider": "gocardless",
        "purpose": "cash",
        "payment_schedule": {
            "interval_unit": "monthly",
            "interval": 7,
            "date": 1,
            "start_date": "2024-04-02T00:00:00.000Z",
            "end_date": "2024-04-03T00:00:00.000Z"
        },
        "contribution_id": "RCB-GC-JSJ6709",
        "service_provider_params": {
            "status": "Subscription cancelled",
            "authorization_reference" : "EV0159P7DZB2P6",
            "contribution_reference" : "BRQ00030E3DXA4P",
            "request_id" : "BRF00014ZXYN5V4F05M90GZEQCARE84K",
            "authorization_url": "https://authexample.gocardless-sandbox.com",
            "reason" : "The mandate for this subscription was cancelled at a bank branch."
        }
    },
    "id": "952c7d0a-ecc6-4538-86f4-ad021f6855d0",
    "ts": 1683086449658,
    "resend": true
}

Recurring contribution rejection message

Payload
Name Type Description Accepted values
type
Required
string recurring_contribution_rejected
ch
Required
string notifications
payload.status
Required
string Status of the recurring contribution
payload.contribution_name
Required
string User given identifier for the contribution
payload.pot_id
Required
string Pot ID of investor to direct the payment
payload.investor_id
Required
string Investor ID of the investor making the contribution
payload.amount
Required
string Amount as a numeral string with two decimal points
payload.sub_transaction_type
Required
string Sub transaction type for recurring contribution Regular contribution, Regular contribution - non relievable, Regular contribution - Employer
payload.currency
Required
string Currency configured for the pot
payload.payment_type
Required
string Type of payment
payload.service_provider
Required
string Service provider managing the recurring payment subscription
payload.purpose
Required
string Purpose of the recurring contribution cash, invest
payload.source_id string Only for payments intents for employer contributions made towards SIPP Accumulation Products
payload.payment_schedule
Required
object Parameters based on payment schedules
payload.payment_schedule.interval_unit
Required
string Repeating interval unit of recurring payment monthly
payload.payment_schedule.interval
Required
number Repeating interval of recurring payment
payload.payment_schedule.date number Date the payment is expected to be triggered if frequency is monthly
payload.payment_schedule.start_date
Required
string Date to initiate the recurring payments
payload.payment_schedule.end_date string Date to conclude the recurring payments, if count is not provided
payload.payment_schedule.count number No of recurring payments to trigger before concluding the payments, if an end date is not provided
payload.contribution_id
Required
string System generated unique ID
payload.service_provider_params
Required
object Parameters based on service provider
payload.service_provider_params.status
Required
string Status transitions depend on the service provider
payload.service_provider_params.reason
Required
string Reason for disabling/cancelling the contribution
Examples
{
    "type": "recurring_contribution_rejected",
    "ch": "notifications",
    "payload": {
        "status": "Rejected",
        "contribution_name": "GIA contribution-1",
        "pot_id": "pot-XWL3805770",
        "investor_id": "inv-QRY29279",
        "amount": "1000060.12",
        "sub_transaction_type": "Regular contribution",
        "currency": "GBP",
        "payment_type": "direct_debit",
        "service_provider": "gocardless",
        "purpose": "cash",
        "payment_schedule": {
            "interval_unit": "monthly",
            "interval": 7,
            "date": 1,
            "start_date": "2024-04-02T00:00:00.000Z",
            "end_date": "2024-04-03T00:00:00.000Z"
        },
        "contribution_id": "RCB-GC-JSJ6709",
        "service_provider_params": {
            "status": "Pending service provider setup",
            "reason": "One of your parameters was incorrectly typed"
        }
    },
    "id": "952c7d0a-ecc6-4538-86f4-ad021f6855d0",
    "ts": 1683086449658,
    "resend": true
}

Recurring contribution authorization url received message

Payload
Name Type Description Accepted values
type
Required
string recurring_contribution_authorization_url_received
ch
Required
string notifications
payload.status
Required
string Status of the recurring contribution
payload.contribution_name
Required
string User given identifier for the contribution
payload.pot_id
Required
string Pot ID of investor to direct the payment
payload.investor_id
Required
string Investor ID of the investor making the contribution
payload.amount
Required
string Amount as a numeral string with two decimal points
payload.sub_transaction_type
Required
string Sub transaction type for recurring contribution Regular contribution, Regular contribution - non relievable, Regular contribution - Employer
payload.currency
Required
string Currency configured for the pot
payload.payment_type
Required
string Type of payment
payload.service_provider
Required
string Service provider managing the recurring payment subscription
payload.purpose
Required
string Purpose of the recurring contribution cash, invest
payload.source_id string Only for payments intents for employer contributions made towards SIPP Accumulation Products
payload.payment_schedule
Required
object Parameters based on payment schedules
payload.payment_schedule.interval_unit
Required
string Repeating interval unit of recurring payment monthly
payload.payment_schedule.interval
Required
number Repeating interval of recurring payment
payload.payment_schedule.date number Date the payment is expected to be triggered if frequency is monthly
payload.payment_schedule.start_date
Required
string Date to initiate the recurring payments
payload.payment_schedule.end_date string Date to conclude the recurring payments, if count is not provided
payload.payment_schedule.count number No of recurring payments to trigger before concluding the payments, if an end date is not provided
payload.contribution_id
Required
string System generated unique ID
payload.service_provider_params
Required
object Parameters based on service provider
payload.service_provider_params.status
Required
string Status transitions depend on the service provider
payload.service_provider_params.request_id
Required
string Request ID used to create a contribution with the service provider
payload.service_provider_params.authorization_url
Required
string Authorization URL sent by service provider to setup customer reference data and bank account information
Examples
{
    "type": "recurring_contribution_rejected",
    "ch": "notifications",
    "payload": {
        "status": "Pending",
        "contribution_name": "Sanjali SIPP contribution",
        "pot_id": "pot-XWL3805775",
        "investor_id": "inv-NNO44399",
        "amount": "1000",
        "sub_transaction_type": "Regular contribution",
        "currency": "GBP",
        "payment_type": "direct_debit",
        "service_provider": "gocardless",
        "purpose": "cash",
        "payment_schedule": {
            "interval_unit": "monthly",
            "interval": 1,
            "start_date": "Thu Jun 01 2023 00:00:00 GMT+0000 (Coordinated Universal Time)",
            "date": 1,
            "count": 10
        },
        "financial_product_id": "sipp_accumulation",
        "contribution_id": "RCB-GC-JDJ4807",
        "service_provider_params": {
            "status": "Pending service provider setup",
            "request_id": "BRQ0003R0RBM2BK",
            "authorization_url": "https://pay-sandbox.gocardless.com/billing/static/flow?id=BRF0001BM491H7NWGZ6W2Z5NMVV7GP4T"
        }
    },
    "id": "852c7d0a-ecc6-4538-86f4-ad021f6855k0",
    "ts": 1684086449658,
    "resend": true
}

Recurring contribution resume message

Payload
Name Type Description Accepted values
type
Required
string recurring_contribution_resumed
ch
Required
string notifications
payload.status
Required
string Status of the recurring contribution
payload.contribution_name
Required
string User given identifier for the contribution
payload.pot_id
Required
string Pot ID of investor to direct the payment
payload.investor_id
Required
string Investor ID of the investor making the contribution
payload.amount
Required
string Amount as a numeral string with two decimal points
payload.sub_transaction_type
Required
string Sub transaction type for recurring contribution Regular contribution, Regular contribution - non relievable, Regular contribution - Employer
payload.currency
Required
string Currency configured for the pot
payload.payment_type
Required
string Type of payment
payload.service_provider
Required
string Service provider managing the recurring payment subscription
payload.purpose
Required
string Purpose of the recurring contribution cash, invest
payload.source_id string Only for payments intents for employer contributions made towards SIPP Accumulation Products
payload.payment_schedule
Required
object Parameters based on payment schedules
payload.payment_schedule.interval_unit
Required
string Repeating interval unit of recurring payment monthly
payload.payment_schedule.interval
Required
number Repeating interval of recurring payment
payload.payment_schedule.date number Date the payment is expected to be triggered if frequency is monthly
payload.payment_schedule.start_date
Required
string Date to initiate the recurring payments
payload.payment_schedule.end_date string Date to conclude the recurring payments, if count is not provided
payload.payment_schedule.count number No of recurring payments to trigger before concluding the payments, if an end date is not provided
payload.contribution_id
Required
string System generated unique ID
payload.service_provider_params
Required
object Parameters based on service provider
payload.service_provider_params.status
Required
string Status transitions depend on the service provider
payload.service_provider_params.reason
Required
string Reason for disabling/cancelling the contribution
Examples
{
    "type": "recurring_contribution_resumed",
    "ch": "notifications",
    "payload": {
        "status": "Active",
        "contribution_name": "GIA contribution-1",
        "pot_id": "pot-XWL3805770",
        "investor_id": "inv-QRY29279",
        "amount": "1000060.12",
        "sub_transaction_type": "Regular contribution",
        "currency": "GBP",
        "payment_type": "direct_debit",
        "service_provider": "gocardless",
        "purpose": "cash",
        "payment_schedule": {
            "interval_unit": "monthly",
            "interval": 7,
            "date": 1,
            "start_date": "2024-04-02T00:00:00.000Z",
            "end_date": "2024-04-03T00:00:00.000Z"
        },
        "contribution_id": "RCB-GC-JSJ6709",
        "service_provider_params": {
            "status": "Subscription resumed",
            "authorization_reference" : "EV0159P7DZB2P6",
            "contribution_reference" : "BRQ00030E3DXA4P",
            "request_id" : "BRF00014ZXYN5V4F05M90GZEQCARE84K",
            "authorization_url": "https://authexample.gocardless-sandbox.com"
        }
    },
    "id": "952c7d0a-ecc6-4538-86f4-ad021f6855d0",
    "ts": 1683086449658,
    "resend": true
}

Recurring contribution completion message

Payload
Name Type Description Accepted values
type
Required
string recurring_contribution_finished
ch
Required
string notifications
payload.status
Required
string Status of the recurring contribution
payload.contribution_name
Required
string User given identifier for the contribution
payload.pot_id
Required
string Pot ID of investor to direct the payment
payload.investor_id
Required
string Investor ID of the investor making the contribution
payload.amount
Required
string Amount as a numeral string with two decimal points
payload.sub_transaction_type
Required
string Sub transaction type for recurring contribution Regular contribution, Regular contribution - non relievable, Regular contribution - Employer
payload.currency
Required
string Currency configured for the pot
payload.payment_type
Required
string Type of payment
payload.service_provider
Required
string Service provider managing the recurring payment subscription
payload.purpose
Required
string Purpose of the recurring contribution cash, invest
payload.source_id string Only for payments intents for employer contributions made towards SIPP Accumulation Products
payload.payment_schedule
Required
object Parameters based on payment schedules
payload.payment_schedule.interval_unit
Required
string Repeating interval unit of recurring payment monthly
payload.payment_schedule.interval
Required
number Repeating interval of recurring payment
payload.payment_schedule.date number Date the payment is expected to be triggered if frequency is monthly
payload.payment_schedule.start_date
Required
string Date to initiate the recurring payments
payload.payment_schedule.end_date string Date to conclude the recurring payments, if count is not provided
payload.payment_schedule.count number No of recurring payments to trigger before concluding the payments, if an end date is not provided
payload.contribution_id
Required
string System generated unique ID
payload.service_provider_params
Required
object Parameters based on service provider
payload.service_provider_params.status
Required
string Status transitions depend on the service provider
payload.service_provider_params.reason
Required
string Reason for disabling/cancelling the contribution
Examples
{
    "type": "recurring_contribution_finished",
    "ch": "notifications",
    "payload": {
        "status": "Finished",
        "contribution_name": "GIA contribution-1",
        "pot_id": "pot-XWL3805770",
        "investor_id": "inv-QRY29279",
        "amount": "1000060.12",
        "sub_transaction_type": "Regular contribution",
        "currency": "GBP",
        "payment_type": "direct_debit",
        "service_provider": "gocardless",
        "purpose": "cash",
        "payment_schedule": {
            "interval_unit": "monthly",
            "interval": 7,
            "date": 1,
            "start_date": "2024-04-02T00:00:00.000Z",
            "end_date": "2024-04-03T00:00:00.000Z"
        },
        "contribution_id": "RCB-GC-JSJ6709",
        "service_provider_params": {
            "status": "Subscription finished",
            "authorization_reference" : "EV0159P7DZB2P6",
            "contribution_reference" : "BRQ00030E3DXA4P",
            "request_id" : "BRF00014ZXYN5V4F05M90GZEQCARE84K",
            "authorization_url": "https://authexample.gocardless-sandbox.com",
            "reason" : "The subscription has finished."
        }
    },
    "id": "952c7d0a-ecc6-4538-86f4-ad021f6855d0",
    "ts": 1683086449658,
    "resend": true
}

Recurring contribution update message

Payload
Name Type Description Accepted values
type
Required
string recurring_contribution_updated
ch
Required
string notifications
payload.status
Required
string Status of the recurring contribution
payload.contribution_name
Required
string User given identifier for the contribution
payload.pot_id
Required
string Pot ID of investor to direct the payment
payload.investor_id
Required
string Investor ID of the investor making the contribution
payload.amount
Required
string Amount as a numeral string with two decimal points
payload.sub_transaction_type
Required
string Sub transaction type for recurring contribution Regular contribution, Regular contribution - non relievable, Regular contribution - Employer
payload.currency
Required
string Currency configured for the pot
payload.payment_type
Required
string Type of payment
payload.service_provider
Required
string Service provider managing the recurring payment subscription
payload.purpose
Required
string Purpose of the recurring contribution cash, invest
payload.source_id string Only for payments intents for employer contributions made towards SIPP Accumulation Products
payload.payment_schedule
Required
object Parameters based on payment schedules
payload.payment_schedule.interval_unit
Required
string Repeating interval unit of recurring payment monthly
payload.payment_schedule.interval
Required
number Repeating interval of recurring payment
payload.payment_schedule.date number Date the payment is expected to be triggered if frequency is monthly
payload.payment_schedule.start_date
Required
string Date to initiate the recurring payments
payload.payment_schedule.end_date string Date to conclude the recurring payments, if count is not provided
payload.payment_schedule.count number No of recurring payments to trigger before concluding the payments, if an end date is not provided
payload.contribution_id
Required
string System generated unique ID
payload.service_provider_params
Required
object Parameters based on service provider
payload.service_provider_params.status
Required
string Status transitions depend on the service provider
payload.service_provider_params.reason
Required
string Reason for disabling/cancelling the contribution
Examples
{
    "type": "recurring_contribution_updated",
    "ch": "notifications",
    "payload": {
        "status": "Active",
        "contribution_name": "GIA contribution-1",
        "pot_id": "pot-XWL3805770",
        "investor_id": "inv-QRY29279",
        "amount": "1000060.12",
        "sub_transaction_type": "Regular contribution",
        "currency": "GBP",
        "payment_type": "direct_debit",
        "service_provider": "gocardless",
        "purpose": "cash",
        "payment_schedule": {
            "interval_unit": "monthly",
            "interval": 7,
            "date": 1,
            "start_date": "2024-04-02T00:00:00.000Z",
            "end_date": "2024-04-03T00:00:00.000Z"
        },
        "contribution_id": "RCB-GC-JSJ6709",
        "service_provider_params": {
            "status": "Mandate replaced",
            "authorization_reference" : "EV1059P8HGJ6P6",
            "contribution_reference" : "BRQ00030E3DXA4P",
            "request_id" : "BRF00014ZXYN5V4F05M90GZEQCARE84K",
            "authorization_url": "https://authexample.gocardless-sandbox.com"
        }
    },
    "id": "952c7d0a-ecc6-4538-86f4-ad021f6855d0",
    "ts": 1683086449658,
    "resend": true
}

HMRC LISA investor creation failed message

Payload
Name Type Description Accepted values
type
Required
string HMRC_LISA_investor_creation_failed
ch
Required
string notifications
payload.investor_id
Required
string Investor ID of the investor account
payload.account_id
Required
string Account ID of the investor account
payload.hmrc_data
Required
object HMRC related data
payload.hmrc_data.status
Required
string Indicate the status of the LISA investor and investor account creation with HMRC
payload.hmrc_data.reason
Required
string Reason for failure
Examples
{
    "type": "HMRC_LISA_investor_creation_failed",
    "ch": "notifications",
    "payload": {
        "investor_id": "inv-QRY29279",
        "account_id": "LISAC1699158978930",
        "hmrc_data": {
            "status": "hmrc_investor_creation_failed",
            "reason": "The HMRC request contains invalid or missing data"
        }
    },
    "id": "952c7d0a-ecc6-4538-86f4-ad021f6855d0",
    "ts": 1683086449658,
    "resend": true
}

HMRC LISA account creation failed message

Payload
Name Type Description Accepted values
type
Required
string HMRC_LISA_account_creation_failed
ch
Required
string notifications
payload.investor_id
Required
string Investor ID of the investor account
payload.account_id
Required
string Account ID of the investor account
payload.hmrc_data
Required
object HMRC related data
payload.hmrc_data.status
Required
string Indicate the status of the LISA investor and investor account creation with HMRC
payload.hmrc_data.reason
Required
string Reason for failure
Examples
{
    "type": "HMRC_LISA_account_creation_failed",
    "ch": "notifications",
    "payload": {
        "investor_id": "inv-QRY29279",
        "account_id": "LISAC1699158978930",
        "hmrc_data": {
            "status": "hmrc_account_creation_failed",
            "reason": "The HMRC request contains invalid or missing data"
        }
    },
    "id": "952c7d0a-ecc6-4538-86f4-ad021f6855d0",
    "ts": 1683086449658,
    "resend": true
}

HMRC LISA account creation successful message

Payload
Name Type Description Accepted values
type
Required
string HMRC_LISA_account_creation_successful
ch
Required
string notifications
payload.investor_id
Required
string Investor ID of the investor account
payload.account_id
Required
string Account ID of the investor account
payload.hmrc_data
Required
object HMRC related data
payload.hmrc_data.status
Required
string Indicate the status of the LISA investor and investor account creation with HMRC
payload.hmrc_data.lisa_investor_reference
Required
object HMRC LISA investor reference
Examples
{
    "type": "HMRC_LISA_account_creation_successful",
    "ch": "notifications",
    "payload": {
        "investor_id": "inv-QRY29279",
        "account_id": "LISAC1699158978930",
        "hmrc_data": {
            "status": "hmrc_account_creation_successful",
            "lisa_investor_reference": "5305636328" 
        }
    },
    "id": "952c7d0a-ecc6-4538-86f4-ad021f6855d0",
    "ts": 1683086449658,
    "resend": true
}

Test Methods

Test methods are used for easier testing of connectivity, keys and tokens. Since they are not tied to a speific functionality you can use them freely

Wealth manager greeting for BE

Authorizations:
ApiSecretKey

Responses

Request samples

curl --request GET \
  --url https://web_host_name/tenant/test/hello-world-be \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "tenant": "wos",
  • "members": [
    ],
  • "message": "Welcome to WOS world"
}

Individual Investors

The Investor endpoint allows you to create investors, update investors and retrieve investor records in bulk or individually. If a KYC/AML service has been set-up through the system (e.g. Onfido), then the investor will be verified using this service.

When retrieving the investor, the following fields will provide information regarding the investor’s status that can be used for deciding on what subsequent investor action must be permitted.

  • dealing_status: Normally set to Active once KYC/AML passes, however may be independently set by administrators if required.

  • kyc_aml_status - the status of the KYC/AML check.

  • Status - ultimate status of the investor derived from dealing_status and kcy_aml_status.

If the system is not set-up to manage the KYC/AML service then the wealth manager must specify the kyc_aml_status and dealing_status on investor creation and update. The status of the investor will be consider active only when the kyc_aml_status : "clear" and dealing_status : "active"

Get all investors

Returns all the investors in an array

Authorizations:
ApiSecretKey
query Parameters
page_size
string

Page size for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_number, both page_size and page_number will be defaulted to 500 and 1. Max page size is 2000. Results are sorted decending order of the created date & time.

page_number
string

Page number for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_size, both page_size and page_number will be defaulted to 500 and 1. Results are sorted decending order of the created date & time.

sort
string
Default: "desc"
Enum: "asc" "desc"

Sorting order; results are sorted by creation time.

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/investors/v1?page_size=SOME_STRING_VALUE&page_number=SOME_STRING_VALUE&sort=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "investors": [
    ],
  • "next_page_available": true
}

Create investor

Create a new investor in the system.

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
title
string
gender
string
first_name
required
string <= 100 characters
last_name
required
string [ 2 .. 100 ] characters
email
string <= 100 characters
mobile_number
string <= 16 characters
home_number
string <= 16 characters
office_number
string <= 16 characters
nationality
string = 3 characters

3 character country code inline with ISO 3166-1 alpha-3

tax_id
string

Mandatory if the “Tax ID uniqueness validation for investors” configuration is enabled. The status of this configuration can be verified under Firm Configurations in the Admin UI. Uniqueness of the investor's tax_id will only be validated if the configuration is enabled.

For investors under 18 years of age (based on date_of_birth), the tax_id is optional. If provided, it must follow the NINO format.

For investors under 16 years of age, if a tax_id is provided, the request will be rejected.

kyc_aml_status
string
Default: "not_started"
Enum: "submitted" "kyc_failed_error" "pending" "clear" "not_started"
dealing_status
string
Default: "inactive"
Enum: "inactive" "active"
Array of objects
object
mifid_tax_id
string
tax_residency_compliant
boolean
date_of_birth
string <date>

YYYY-MM-DD

retirement_age
number

Intended retirement age of the investor. This will only be applicable for the financial product SIPP.

tax_residence
string
Enum: "GB-ENG" "GB-NIR" "GB-SCT" "GB-WLS"

Residence of the investor for tax purposes. (for example, to claim relief at source) GB-ENG=England GB-NIR=Northern Ireland GB-SCT=Scotland GB-WLS=Wales.

employment_status
string
Enum: "employed" "self_employed" "pensioner" "child_under_16" "in_full_time_education" "unemployed" "caring_for_a_person_over_16" "caring_for_a_person_under_16" "other"

Status of an investor best describes their personal circumstances. This will only be applicable for the financial product SIPP.

mpaa_triggered
boolean

Whether the investor has triggered the Money Purchase Annual Allowance. This will only be applicable for the financial product SIPP.

mpaa_triggered_date
string <date>

Date of triggering the Money Purchase Annual Allowance. This is only required if mpaa_triggered is true.The date format should be YYYY-MM-DD. This will only be applicable for the financial product SIPP.

workplace_employers
Array of strings

Unique IDs of workplace employers who are contributing to the workplace pension of the investor.

Array of objects

Additional details of the lifetime allowance protections of the investor. This will only be applicable for the financial product SIPP.

object

Beneficiary and nominee list of the expression of wish. This will only be applicable for the financial product SIPP.

Array of objects

Allowed to create only one bank account when creating a new investor.

vulnerable_customer
boolean

Whether the investor has been identified as a person who is susceptible to harm, due to their personal circumstances.

Responses

Request samples

Content type
application/json
{
  • "title": "Mr.",
  • "gender": "male",
  • "first_name": "David",
  • "last_name": "Brown",
  • "email": "davidbrown@gmail.com",
  • "mobile_number": "+441234567890",
  • "home_number": "+441234587830",
  • "office_number": "+442072343456",
  • "nationality": "GBR",
  • "tax_id": "AB123401C",
  • "kyc_aml_status": "not_started",
  • "dealing_status": "inactive",
  • "id_numbers": [
    ],
  • "address": {
    },
  • "mifid_tax_id": "2382392274",
  • "tax_residency_compliant": true,
  • "date_of_birth": "1990-12-20",
  • "retirement_age": 60,
  • "tax_residence": "GB-ENG",
  • "employment_status": "employed",
  • "mpaa_triggered": true,
  • "mpaa_triggered_date": "2023-01-30",
  • "workplace_employers": [
    ],
  • "lta_protection_details": [
    ],
  • "expression_of_wish": {
    },
  • "bank_accounts": [
    ],
  • "vulnerable_customer": true
}

Response samples

Content type
application/json
{
  • "investor_id": "inv-XUT11265",
  • "title": "Mr.",
  • "gender": "male",
  • "first_name": "David",
  • "last_name": "Brown",
  • "status": "kyc_pending",
  • "email": "davidbrown@gmail.com",
  • "mobile_number": "+441234567890",
  • "home_number": "+441234587830",
  • "office_number": "+442072343456",
  • "nationality": "GBR",
  • "tax_id": "AB123456C",
  • "kyc_aml_status": "not_started",
  • "dealing_status": "inactive",
  • "id_numbers": [
    ],
  • "address": {
    },
  • "mifid_tax_id": "2382392274",
  • "tax_residency_compliant": true,
  • "date_of_birth": "1990-12-20",
  • "retirement_age": 60,
  • "tax_residence": "GB-ENG",
  • "employment_status": "employed",
  • "mpaa_triggered": true,
  • "mpaa_triggered_date": "2023-01-30",
  • "workplace_employers": [
    ],
  • "lta_protection_details": [
    ],
  • "expression_of_wish": {
    },
  • "kyc_aml_status_last_updated": "2020-07-10T07:36:05.884Z",
  • "bank_accounts": [
    ],
  • "vulnerable_customer": true,
  • "reference_version": 1,
  • "created_at": "2020-07-08T07:36:05.884Z",
  • "updated_at": "2020-07-10T07:36:05.884Z"
}

Get investor

Get details of an investor

Authorizations:
ApiSecretKey
path Parameters
investor_id
required
string

Investor ID

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url https://web_host_name/tenant/investors/v1/%7Binvestor_id%7D \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "investor_id": "inv-XUT11265",
  • "title": "Mr.",
  • "gender": "male",
  • "first_name": "David",
  • "last_name": "Brown",
  • "status": "kyc_pending",
  • "email": "davidbrown@gmail.com",
  • "mobile_number": "+441234567890",
  • "home_number": "+441234587830",
  • "office_number": "+442072343456",
  • "nationality": "GBR",
  • "tax_id": "AB123456C",
  • "kyc_aml_status": "not_started",
  • "dealing_status": "inactive",
  • "id_numbers": [
    ],
  • "address": {
    },
  • "mifid_tax_id": "2382392274",
  • "tax_residency_compliant": true,
  • "date_of_birth": "1990-12-20",
  • "kyc_aml_status_last_updated": "2020-07-10T07:36:05.884Z",
  • "bank_accounts": [
    ],
  • "retirement_age": 60,
  • "tax_residence": "GB-ENG",
  • "employment_status": "employed",
  • "mpaa_triggered": true,
  • "mpaa_triggered_date": "2023-01-30",
  • "workplace_employers": [
    ],
  • "lta_protection_details": [
    ],
  • "expression_of_wish": {
    },
  • "vulnerable_customer": true,
  • "reference_version": 1,
  • "created_at": "2020-07-08T07:36:05.884Z",
  • "updated_at": "2020-07-10T07:36:05.884Z"
}

Update investor

Update an existing investor. The system will update only the fields sent in the request. Field mentioned as Nullable can be deleted by updating those values with null. Sending empty values for fields will not update the fields.

Authorizations:
ApiSecretKey
path Parameters
investor_id
required
string

Investor ID

header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
title
string or null
gender
string or null
first_name
string <= 100 characters
last_name
string [ 2 .. 100 ] characters
email
string or null <= 100 characters
mobile_number
string or null <= 16 characters
home_number
string or null <= 16 characters
office_number
string or null <= 16 characters
nationality
string or null = 3 characters

3 character country code inline with ISO 3166-1 alpha-3

tax_id
string or null

Mandatory if the “Tax ID uniqueness validation for investors” configuration is enabled. The status of this configuration can be verified under Firm Configurations in the Admin UI. Uniqueness of the investor's tax_id will only be validated if the configuration is enabled.

For investors under 18 years of age (based on date_of_birth), the tax_id is optional. If provided, it must follow the NINO format.

For investors under 16 years of age, if a tax_id is provided, the request will be rejected.

kyc_aml_status
string
Enum: "submitted" "kyc_failed_error" "pending" "clear" "not_started"
dealing_status
string
Enum: "inactive" "active"
Array of objects or null

Replaces the array in the server.

object or null
mifid_tax_id
string or null
tax_residency_compliant
boolean or null
date_of_birth
string or null <date>

YYYY-MM-DD

retirement_age
number or null

Intended retirement age of the investor. This will only be applicable for the financial product SIPP.

tax_residence
string or null
Enum: "GB-ENG" "GB-NIR" "GB-SCT" "GB-WLS"

Residence of the investor for tax purposes. (for example, to claim relief at source) GB-ENG=England GB-NIR=Northern Ireland GB-SCT=Scotland GB-WLS=Wales

employment_status
string
Enum: "employed" "self_employed" "pensioner" "child_under_16" "in_full_time_education" "unemployed" "caring_for_a_person_over_16" "caring_for_a_person_under_16" "other"

Status of an investor best describes their personal circumstances. This will only be applicable for the financial product SIPP.

mpaa_triggered
boolean or null

Whether the investor has triggered the Money Purchase Annual Allowance. This will only be applicable for the financial product SIPP.

mpaa_triggered_date
string or null <date>

Date of triggering the Money Purchase Annual Allowance. This is only required if mpaa_triggered is true. This will only be applicable for the financial product SIPP.

workplace_employers
Array of strings or null

Unique IDs of workplace employers who are contributing to the workplace pensions. The incoming list of employers will replace the existing list of employers.

Array of objects or null

Additional details of the lifetime allowance protections of the investor. This will only be applicable for the financial product SIPP.

object or null

Beneficiary and nominee list of the expression of wish. This will only be applicable for the financial product SIPP.

vulnerable_customer
boolean

Whether the investor has been identified as a person who is susceptible to harm, due to their personal circumstances.

reference_version
required
integer

Responses

Request samples

Content type
application/json
{
  • "title": "Mr.",
  • "gender": "male",
  • "first_name": "David",
  • "last_name": "Brown",
  • "email": "davidbrown@gmail.com",
  • "mobile_number": "+441234567890",
  • "home_number": "+441234587830",
  • "office_number": "+442072343456",
  • "nationality": "GBR",
  • "tax_id": "AB123456C",
  • "kyc_aml_status": "not_started",
  • "dealing_status": "inactive",
  • "id_numbers": [
    ],
  • "address": {
    },
  • "mifid_tax_id": "2382392274",
  • "tax_residency_compliant": true,
  • "date_of_birth": "1990-12-20",
  • "retirement_age": 60,
  • "tax_residence": "GB-ENG",
  • "employment_status": "employed",
  • "mpaa_triggered": true,
  • "mpaa_triggered_date": "2023-01-30",
  • "workplace_employers": [
    ],
  • "lta_protection_details": [
    ],
  • "expression_of_wish": {
    },
  • "vulnerable_customer": true,
  • "reference_version": 1
}

Response samples

Content type
application/json
{
  • "investor_id": "inv-XUT11265",
  • "title": "Mr.",
  • "gender": "male",
  • "first_name": "David",
  • "last_name": "Brown",
  • "status": "kyc_pending",
  • "email": "davidbrown@gmail.com",
  • "mobile_number": "+441234567890",
  • "home_number": "+441234587830",
  • "office_number": "+442072343456",
  • "nationality": "GBR",
  • "tax_id": "AB123456C",
  • "kyc_aml_status": "not_started",
  • "dealing_status": "inactive",
  • "id_numbers": [
    ],
  • "address": {
    },
  • "mifid_tax_id": "2382392274",
  • "tax_residency_compliant": true,
  • "date_of_birth": "1990-12-20",
  • "kyc_aml_status_last_updated": "2020-07-10T07:36:05.884Z",
  • "bank_accounts": [
    ],
  • "retirement_age": 60,
  • "tax_residence": "GB-ENG",
  • "employment_status": "employed",
  • "mpaa_triggered": true,
  • "mpaa_triggered_date": "2023-01-30",
  • "workplace_employers": [
    ],
  • "lta_protection_details": [
    ],
  • "expression_of_wish": {
    },
  • "vulnerable_customer": true,
  • "reference_version": 1,
  • "created_at": "2020-07-08T07:36:05.884Z",
  • "updated_at": "2020-07-10T07:36:05.884Z"
}

Create fee nomination for an investor

This endpoint supports the creation of a Fee Nomination for an investor. A pot can be nominated to deduct all types of fees from all pots of an investor.

Authorizations:
ApiSecretKey
path Parameters
investor_id
required
string

Investor ID

header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
required
Array of objects (Fee nominee pots)

Only one fee nominee pot can be given

Responses

Request samples

Content type
application/json
{
  • "nominations": [
    ]
}

Response samples

Content type
application/json
{
  • "nominations": [
    ],
  • "reference_version": 1,
  • "investor_id": "inv-XUT11265",
  • "created_at": "2023-02-08T07:36:05.884Z",
  • "updated_at": "2023-02-10T07:36:05.884Z"
}

Get fee nomination for an investor

This endpoint returns the nominee pot set up for the investor to deduct fees.

Authorizations:
ApiSecretKey
path Parameters
investor_id
required
string

Investor ID

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url https://web_host_name/tenant/investors/v1/%7Binvestor_id%7D/fee-nominations \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "nominations": [
    ],
  • "reference_version": 1,
  • "investor_id": "inv-XUT11265",
  • "created_at": "2023-02-08T07:36:05.884Z",
  • "updated_at": "2023-02-10T07:36:05.884Z"
}

Update fee nomination for an investor

This endpoint supports the update of a Fee Nomination of an investor.

Authorizations:
ApiSecretKey
path Parameters
investor_id
required
string

Investor ID

header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
required
Array of objects (Fee nominee pots)

Replaces the array in the server. Only one fee nominee pot can be given

reference_version
required
integer

Must match with the reference version in the server

Responses

Request samples

Content type
application/json
{
  • "nominations": [
    ],
  • "reference_version": 1
}

Response samples

Content type
application/json
{
  • "nominations": [
    ],
  • "reference_version": 1,
  • "investor_id": "inv-XUT11265",
  • "created_at": "2023-02-08T07:36:05.884Z",
  • "updated_at": "2023-02-10T07:36:05.884Z"
}

Delete fee nomination for an investor

This endpoint supports the deletion of a Fee Nomination.

Authorizations:
ApiSecretKey
path Parameters
investor_id
required
string

Investor ID

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request DELETE \
  --url https://web_host_name/tenant/investors/v1/%7Binvestor_id%7D/fee-nominations \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "message": "Successfully deleted nominations for investor [inv-XUT11265]"
}

Get all tax codes

Returns all the tax codes in an array

Authorizations:
ApiSecretKey
query Parameters
investor_id
string

Investor ID

page_size
string

Page size for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_number, both page_size and page_number will be defaulted to 1000 and 1. Max page size is 4000. Results are sorted decending order of the created date & time.

page_number
string

Page number for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_size, both page_size and page_number will be defaulted to 1000 and 1. Results are sorted decending order of the created date & time.

sort
string
Default: "desc"
Enum: "asc" "desc"

Sorting order; results are sorted by creation time.

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/investors/v1/tax-codes?investor_id=SOME_STRING_VALUE&page_size=SOME_STRING_VALUE&page_number=SOME_STRING_VALUE&sort=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "tax_codes": [
    ],
  • "next_page_available": true
}

Organisational Investors

This feature is currently in BETA mode

The Organisational investors endpoint family allows you to create and manage organisational investors.

When retrieving the organisational investor, the following fields will provide information regarding the organisation investor’s status that can be used for deciding on what subsequent organisation investor action must be permitted.

  • dealing_status: Normally set to Active once KYB passes, however may be independently set by administrators if required.

  • kyb_status - the status of the KYB check.

  • Status - ultimate status of the investor derived from dealing_status and kcb_status.

If the system is not set-up to manage the KYB service then the wealth manager must specify the kyb_status and dealing_status on organisational investor creation and update. The status of the organisational investor will be consider active only when the kyb_status : "clear" and dealing_status : "active"

Create organisational investor (BETA)

Create a new organisational investor in the system.

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
organisation_name
required
string <= 100 characters
kyb_status
string
Default: "not_started"
Enum: "submitted" "kyb_failed_error" "pending" "clear" "not_started"

Know Your Business Status of the organisation

dealing_status
string
Default: "inactive"
Enum: "inactive" "active"

Status of the organisation

Array of objects

Contact details of any individual officer of the organisation

required
object

Correspondence/ Registered address of the organisation

Array of objects

Details of bank account of the organisation. Allowed to create only one bank account when creating a new investor.

Responses

Request samples

Content type
application/json
{
  • "organisation_name": "ABC Company Pvt Ltd",
  • "kyb_status": "not_started",
  • "dealing_status": "inactive",
  • "corporate_officers": [
    ],
  • "address": {
    },
  • "bank_accounts": [
    ]
}

Response samples

Content type
application/json
{
  • "investor_id": "org-XUT11265",
  • "investor_type": "organisation",
  • "organisation_name": "ABC Company Pvt Ltd",
  • "status": "kyb_pending",
  • "kyb_status": "not_started",
  • "dealing_status": "inactive",
  • "corporate_officers": [
    ],
  • "address": {
    },
  • "bank_accounts": [
    ],
  • "reference_version": 1,
  • "created_at": "2020-07-08T07:36:05.884Z",
  • "updated_at": "2020-07-10T07:36:05.884Z"
}

Get all organisational investors (BETA)

Get details of all organisational investors.

Authorizations:
ApiSecretKey
query Parameters
page_size
string

Page size for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_number, both page_size and page_number will be defaulted to 1000 and 1. Max page size is 3000.

page_number
string

Page number for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_size, both page_size and page_number will be defaulted to 1000 and 1.

sort
string
Default: "desc"
Enum: "asc" "desc"

Sorting order; results are sorted by creation time.

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/investor-organisations/v1?page_size=SOME_STRING_VALUE&page_number=SOME_STRING_VALUE&sort=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "next_page_available": "true",
  • "organisations": [
    ]
}

Get organisational investor (BETA)

Get details of an organisational investor.

Authorizations:
ApiSecretKey
path Parameters
investor_id
required
string

Investor ID

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url https://web_host_name/tenant/investor-organisations/v1/%7Binvestor_id%7D \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "investor_id": "org-XUT11265",
  • "investor_type": "organisation",
  • "organisation_name": "ABC Company Pvt Ltd",
  • "status": "kyb_pending",
  • "kyb_status": "not_started",
  • "dealing_status": "inactive",
  • "corporate_officers": [
    ],
  • "address": {
    },
  • "bank_accounts": [
    ],
  • "reference_version": 1,
  • "created_at": "2020-07-08T07:36:05.884Z",
  • "updated_at": "2020-07-10T07:36:05.884Z"
}

Update Organisational investor (BETA)

Update an organisational investor. The system will update only the fields sent in the request. Field mentioned as Nullable can be deleted by updating those values with null. Sending empty values for fields will not update the fields.

Authorizations:
ApiSecretKey
path Parameters
investor_id
required
string

Investor ID

header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
organisation_name
string <= 100 characters
kyb_status
string
Default: "not_started"
Enum: "submitted" "kyb_failed_error" "pending" "clear" "not_started"

Know Your Business Status of the organisation

reference_version
required
integer
dealing_status
string
Default: "inactive"
Enum: "inactive" "active"

Status of the organisation

Array of objects

Contact details of any individual officer of the organisation

object

Correspondence/ Registered address of the organisation

Responses

Request samples

Content type
application/json
{
  • "organisation_name": "ABC Company Pvt Ltd",
  • "kyb_status": "not_started",
  • "reference_version": 2,
  • "dealing_status": "inactive",
  • "corporate_officers": [
    ],
  • "address": {
    }
}

Response samples

Content type
application/json
{
  • "investor_id": "org-XUT11265",
  • "investor_type": "organisation",
  • "organisation_name": "ABC Company Pvt Ltd",
  • "status": "kyb_pending",
  • "kyb_status": "not_started",
  • "dealing_status": "inactive",
  • "corporate_officers": [
    ],
  • "address": {
    },
  • "bank_accounts": [
    ],
  • "reference_version": 1,
  • "created_at": "2020-07-08T07:36:05.884Z",
  • "updated_at": "2020-07-10T07:36:05.884Z"
}

Pots, Holdings and Transactions

Pots allows a wealth manager to compartmentalise investments made by (or on behalf of) an investor to represent different savings goals, risk appetite and investment instructions (e.g. model portfolios). An Investor can have multiple pots for a financial product (e.g within the General Investment Account, one pot could be to target a house purchase goal whereas another pot could target savings for school fees etc.). Each pot consists of cash, investment product holdings, both cash and investments or nothing (empty pot - pending investments).

This end point also returns key information related to the pot (e.g. value, total holdings etc.) as well as transaction history for the pot.

Current Holdings and Transaction History

Current Holding

  • Cash : investment_product_id will be specified as cash. For cash holdings, free_quantity and free_value will return the cash that is settled and available, while locked_quantity and locked_value returns the value of cash which is locked (i.e unsettled, ringfenced for a fee deduction etc.) and cannot be used.total_quantity and total_value will be the total of free and locked.

  • Investment Products : For investment product holdings, total_quantity return the total number of units held of an investment product within the pot, locked-quantity returns the total number of unit which are locked (e.g. ringfenced to be sold) and free-quantity returns number of units available for trading. Value of the holdings are calculated using latest available price. So the formula to calculate the value of the investment products holdings will be quantity*price.

Pending Transactions

  • Cash : type : pending,direction : in (if cash is inbound) or out (if cash is withdrawn - functionality not available yet).

  • Investment products : type : pending,direction : in(buy instruction) or out (sell instruction).

Archived Transactions (historical)

  • Cash : type = archived, direction= in (if cash is inbound) or out (if cash is withdrawn - functionality not available yet) and sub-type : "rejected" or "cancelled"for a failed transaction, and sub-type = "confirmed"or "settled" for a successful transaction.

  • Investment Products : type = archived, direction= in (buy instruction) or out (sell instruction) and sub-type = "rejected"or "cancelled" for a failed transaction, and sub-type = "confirmed"or "settled" for a successful transaction.

Create new pots

This endpoint facilitates the creation of one or more pots for an investor or a group of investors for a selected financial product. A maximum of five pots can be created with a single request. For the creation of a new pot, either the account_id or investor_id must be provided—only one of these parameters should be included, based on the relevant financial product.

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
request_id
required
string <uuid>

Unique request ID to ensure idempotency. (ex: UUID)

investor_id
Array of strings

This field should be populated only for financial_product_id: general_investment_product, stocks_isa, lisa_cash, sipp_fad, sipp_accumulation, lisa_stocks.

account_id
string

This field should be populated only for financial_product_id: treasury_management, stocks_jisa,.

financial_product_id
required
string
Enum: "general_investment_product" "lisa_cash" "lisa_stocks" "sipp_accumulation" "sipp_fad" "stocks_isa" "treasury_management" "stocks_jisa"
required
Array of objects

Maximum of five pots

Responses

Request samples

Content type
application/json
{
  • "request_id": "266ea41d-adf5-480b-af50-15b940c2b955",
  • "investor_id": [
    ],
  • "financial_product_id": "sipp_accumulation",
  • "pots": [
    ]
}

Response samples

Content type
application/json
{
  • "status": "partially_successful",
  • "investor_id": [
    ],
  • "financial_product_id": "sipp_accumulation",
  • "results": [
    ]
}

Get all pots for an investor

Get all Investment Pots of the investor

Authorizations:
ApiSecretKey
query Parameters
investor_id
required
string

Investor ID

financial_product_id
string
Enum: "general_investment_product" "lisa_cash" "lisa_stocks" "sipp_accumulation" "sipp_fad" "stocks_isa" "treasury_management" "stocks_jisa"

multiple financial product IDs as comma seperated string

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/pots/v1?investor_id=SOME_STRING_VALUE&financial_product_id=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "pots": [
    ]
}

Get total value of all pots of an investor

Get the current value of all the investor’s pots broken down by currency (including cash and investment product holdings), currencies or pots with no holdings will be excluded from the reponse.

Authorizations:
ApiSecretKey
query Parameters
investor_id
required
string

Investor ID

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/pots/v1/value?investor_id=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "total_values": [
    ]
}

Retrieve all pots values for a given date

Get the pot values for all pots for a given date. This endpoint requires the Calculate daily holding snapshot job to be enabled to be able to retrieve the pot values for a given date. If no date is provided the current holdings snapshot will be provided.

Authorizations:
ApiSecretKey
query Parameters
date
string <date>

When queried by the date, the response will return the pot value snapshot as of the given date (by the time 24:00). If the date is current operational date, the snapshot at the time of sending the API request will be sent.

page_size
integer [ 1 .. 4000 ]

Page size for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_number, both page_size and page_number will be defaulted to 1000 and 1. Max page size is [4000]. Results are sorted descending order of the created date & time.

page_number
integer >= 1

Page number for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_size, both page_size and page_number will be defaulted to 1000 and 1. Results are sorted descending order of the created date & time.

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/pots/v1/values?date=SOME_STRING_VALUE&page_size=SOME_INTEGER_VALUE&page_number=SOME_INTEGER_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "pots_values": [
    ],
  • "next_page_available": true
}

Get total holdings of an investor

Get a breakdown of all the holdings(cash and investment product holdings) of an investor organised by the pot they belong to.

Authorizations:
ApiSecretKey
query Parameters
investor_id
required
string

ID of the investor

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/pots/v1/holdings?investor_id=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "pots": [
    ]
}

Update existing pot details

Update an existing Pot. The system will update only the fields sent in the payload.Field mentioned as Nullable can be deleted by updating those values with null. Sending empty values for fields will not update the fields.

Authorizations:
ApiSecretKey
path Parameters
pot_id
required
string

Pot ID

header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
pot_name
string [ 1 .. 50 ] characters
portfolio_template_id
string or null
status
string
Enum: "active" "inactive"
reference_version
required
integer

Responses

Request samples

Content type
application/json
{
  • "pot_name": "Retirement Pot",
  • "portfolio_template_id": "pft-c60c9472-6668-4f7a-aa69",
  • "status": "active",
  • "reference_version": 1
}

Response samples

Content type
application/json
{
  • "pot_id": "pot-GYQ5423100",
  • "investor_id": [
    ],
  • "pot_name": "Retirement Pot",
  • "financial_product_id": "general_investment_product",
  • "portfolio_template_id": "pft-c60c9472-6668-4f7a-aa69",
  • "pot_currency": "GBP",
  • "status": "active",
  • "reference_version": 1,
  • "account_id": "SSISA0000000001",
  • "created_at": "2020-07-08T07:36:05.884Z",
  • "updated_at": "2020-07-10T07:36:05.884Z"
}

Retrieve existing pot from pot ID

Authorizations:
ApiSecretKey
path Parameters
pot_id
required
string

Pot ID

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url https://web_host_name/tenant/pots/v1/%7Bpot_id%7D \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "pot_id": "pot-GYQ5423100",
  • "investor_id": [
    ],
  • "pot_name": "Retirement Pot",
  • "financial_product_id": "general_investment_product",
  • "portfolio_template_id": "pft-c60c9472-6668-4f7a-aa69",
  • "pot_currency": "GBP",
  • "status": "active",
  • "reference_version": 1,
  • "account_id": "SSISA0000000001",
  • "created_at": "2020-07-08T07:36:05.884Z",
  • "updated_at": "2020-07-10T07:36:05.884Z"
}

Get current value of a pot

Get the current value of the pot (including cash and investment product holdings)

Authorizations:
ApiSecretKey
path Parameters
pot_id
required
string

Pot ID

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url https://web_host_name/tenant/pots/v1/%7Bpot_id%7D/value \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "pot_id": "pot-UKW3452850",
  • "pot_currency": "GBP",
  • "total_value": "600",
  • "total_free_value": "300",
  • "total_locked_value": "300",
  • "total_cash_value": "250",
  • "total_free_cash_value": "50",
  • "total_locked_cash_value": "200",
  • "settled_cash_position": "334.87"
}

Get current holdings of a pot

Get a breakdown of all the holdings of a pot (cash and investment product holdings)

Authorizations:
ApiSecretKey
path Parameters
pot_id
required
string

Pot ID

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url https://web_host_name/tenant/pots/v1/%7Bpot_id%7D/holdings \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "pot_id": "pot-GYQ5423100",
  • "holdings": [
    ]
}

Get pending & past transactions of a pot

Get a list of pending and archived transactions of the pot by date range. Only last 1000 records will be recieved if the result contain more that 1000 transactions. In that case, the pagination should be used.

Authorizations:
ApiSecretKey
path Parameters
pot_id
required
string

Pot ID

query Parameters
from
string

From timestamp for the query. This must be in ISO format. Eg. 2021-08-12T07:54:47.011Z. If not present the from is set to 2000-01-01T00:00:00.000Z

to
string

To timestamp for the query. This must be in ISO format. Eg. 2021-08-12T07:54:47.011Z. If not present the to is set to current time.

sub_transaction_type
string

Sub transaction type of the transactions to be retrieved from the API

page_size
string

Page size for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_number, both page_size and page_number will be defaulted to 1000 and 1. Max page size is 8000. Results are sorted decending order of the created date & time.

page_number
string

Page number for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_size, both page_size and page_number will be defaulted to 1000 and 1. Results are sorted decending order of the created date & time.

sort
string
Default: "desc"
Enum: "asc" "desc"

Sorting order; results are sorted by creation time.

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/pots/v1/%7Bpot_id%7D/transactions?from=SOME_STRING_VALUE&to=SOME_STRING_VALUE&sub_transaction_type=SOME_STRING_VALUE&page_size=SOME_STRING_VALUE&page_number=SOME_STRING_VALUE&sort=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "pot_id": "pot-UKW3452850",
  • "transactions": [
    ],
  • "next_page_available": true
}

Create inter pot transfers (BETA)

This feature is currently in BETA mode

This endpoint enables users to send an API request to transfer cash holdings or units of an investment products between two pots within an account created under financial products, SIPP Accumulation, LISA Stocks and Shares, LISA Cash, ISA Stocks and Shares and GIA.

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
request_id
required
string

Unique request ID to ensure idempotency. (ex: UUID)

source_pot_id
required
string

Pot ID from which the money should be transferred out.

destination_pot_id
required
string

Pot ID to which money should be transferred in.

investment_product_id
required
string

Investment product that should be transferred from source pot to destination pot. For cash transfers, indicate the investment product as cash.

amount
required
string

Value of cash holdings or number of units of an investment product holdings to transfer.

Responses

Request samples

Content type
application/json
{
  • "request_id": "266ea41d-adf5-480b-af50-15b940c2b848",
  • "source_pot_id": "pot-UKW3452850",
  • "destination_pot_id": "pot-UKW3452850",
  • "investment_product_id": "cash",
  • "amount": "8000.00"
}

Response samples

Content type
application/json
Example
{
  • "transfer_id": "INT-ABCD123456",
  • "source_pot_id": "pot-UKW3452850",
  • "destination_pot_id": "pot-UBW627935",
  • "investment_product_id"": "cash",
  • "amount": "8000",
  • "status": "success",
  • "transactions": [
    ]
}

Get inter pot transfers (BETA)

This feature is currently in BETA mode

This endpoint enables users to retrieve information of inter pot transfer requests.

Authorizations:
ApiSecretKey
query Parameters
transfer_id
string
Example: transfer_id=INT-AAAA123456

ID generated to uniquely identify an accepted internal transfer request. Single transfer_id is expected. Multiple id's are not allowed.

page_size
string
Example: page_size=10

Page size for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_number, both page_size and page_number will be defaulted to 1000 and 1. Max page size is 8000. Results are sorted decending order of the created date & time.

page_number
string
Example: page_number=3

Page number for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_size, both page_size and page_number will be defaulted to 1000 and 1. Results are sorted decending order of the created date & time.

sort
string
Default: "desc"
Enum: "asc" "desc"
Example: sort=asc

Sorting order; results are sorted by creation time.

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/pots/v1/inter-pot-transfer?transfer_id=SOME_STRING_VALUE&page_size=SOME_STRING_VALUE&page_number=SOME_STRING_VALUE&sort=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "inter_pot_transfers": [
    ],
  • "next_page_available": true
}

Portfolio Templates

A portfolio template captures how an investor’s cash (once transferred to a pot) should be automatically invested by the system. A portfolio template consists of a set of investment products and the ratios in which these products must be bought, once cleared cash is available to invest.

For example, a portfolio template ‘PT1’ has the following template

Investment Product Ratio
Investment Product A 20%
Investment Product B 30%
Investment Product C 50%

If GBP 100 is transferred to a pot linked to Portfolio template PT1, the following buy orders will be triggered

  • BUY Investment Product A for GBP 20
  • BUY Investment Product B for GBP 30
  • BUY Investment Product C for GBP 50

Portfolio Creation

Portfolio Templates can be created by the Wealth Manger (generic set of portfolio templates created in the system and a single template will be assigned to an Investor’s pot based on suitability - e.g. robo advisory)

The ratios of investment products within a portfolio template must add up to a 100% - if this is not the case, the system will reject the portfolio creation or update.

Once cleared cash is available in a pot, the system can be instructed to trigger investment product buy requests based on the portfolio template linked to the pot.

Get all the portfolio templates

Get all the portfolio templates

Authorizations:
ApiSecretKey
query Parameters
page_size
string

Page size for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_number, both page_size and page_number will be defaulted to 1000 and 1. Max page size is 8000. Results are sorted decending order of the created date & time.

page_number
string

Page number for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_size, both page_size and page_number will be defaulted to 1000 and 1. Results are sorted decending order of the created date & time.

sort
string
Default: "desc"
Enum: "asc" "desc"

Sorting order; results are sorted by creation time.

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/portfolio-templates/v1/?page_size=SOME_STRING_VALUE&page_number=SOME_STRING_VALUE&sort=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "portfolio_templates": [
    ],
  • "next_page_available": true
}

Create new portfolio template

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
portfolio_name
required
string [ 3 .. 50 ] characters

User given identifier for the portfolio name. The first character must be a letter, the last character can be a number, letter, or underscore, and other characters can be letters, numbers, spaces, underscores, or dashes.

required
Array of objects

Percentages allocated to different investment products within the portfolio template.

Responses

Request samples

Content type
application/json
{
  • "portfolio_name": "PFT5689",
  • "ratios": [
    ]
}

Response samples

Content type
application/json
{
  • "portfolio_template_id": "pft-c60c9472-6668-4f7a-aa69",
  • "portfolio_name": "PFT5689",
  • "reference_version": 1,
  • "ratios": [
    ],
  • "created_at": "2020-07-08T07:36:05.884Z",
  • "updated_at": "2020-07-10T07:36:05.884Z"
}

Retrieve existing portfolio template

Authorizations:
ApiSecretKey
path Parameters
portfolio_template_id
required
string

Portfolio ID

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url https://web_host_name/tenant/portfolio-templates/v1/%7Bportfolio_template_id%7D \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "portfolio_template_id": "pft-c60c9472-6668-4f7a-aa69",
  • "portfolio_name": "PFT5689",
  • "reference_version": 1,
  • "ratios": [
    ],
  • "created_at": "2020-07-08T07:36:05.884Z",
  • "updated_at": "2020-07-10T07:36:05.884Z"
}

Update existing portfolio template

Authorizations:
ApiSecretKey
path Parameters
portfolio_template_id
required
string

Portfolio ID

header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
portfolio_name
string [ 3 .. 50 ] characters

User given identifier for the portfolio name. The first character must be a letter, the last character can be a number, letter, or underscore, and other characters can be letters, numbers, spaces, underscores, or dashes.

Array of objects

Percentages allocated to different investment products within the portfolio template.

reference_version
required
integer

Must match with the reference version in the server.

Responses

Request samples

Content type
application/json
{
  • "portfolio_name": "PFT5689",
  • "ratios": [
    ],
  • "reference_version": 1
}

Response samples

Content type
application/json
{
  • "portfolio_template_id": "pft-c60c9472-6668-4f7a-aa69",
  • "portfolio_name": "PFT5689",
  • "reference_version": 1,
  • "ratios": [
    ],
  • "created_at": "2020-07-08T07:36:05.884Z",
  • "updated_at": "2020-07-10T07:36:05.884Z"
}

Financial Products

Financial Products are the tax wrapper investment vehicles offered by the Wealth Manager (e.g. General Investment Accounts, Stocks and Shares ISAs, SIPPs, LISAs etc.).

The Financial Products endpoint returns all financial products and their configurations setup by the Wealth Manager via the Admin UI.

Get all financial products

Returns all the financial products setup for the tenant in an array

Authorizations:
ApiSecretKey
query Parameters
product_types
string
Enum: "general_investment_product" "lisa_cash" "lisa_stocks" "sipp_accumulation" "sipp_fad" "stocks_isa" "treasury_management" "stocks_jisa"

multiple product types as a comma seperated string

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/financial-products/v1?product_types=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "financial_products": [
    ]
}

Investment Products

Investment products (e.g. mutual funds, ETFs, stocks etc.) are bought and sold by the investor (or by the wealth manager on the investor’s behalf).

The Investment Products endpoint returns all the investment products that are offered by the wealth manager, as well as the current market price. The wealth manager must specify the universe of supported investment products via the Admin UI.

Get configured investment products

Returns all the investment products configured for this tenancy. Request can be filtered by status to return all active or inactive investment products

Authorizations:
ApiSecretKey
query Parameters
status
string
Enum: "active" "inactive"

status of investment product. If empty will return all investment products.

page_size
string

Page size for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_number, both page_size and page_number will be defaulted to 1000 and 1. Max page size is 3000. Results are sorted decending order of the created date & time.

page_number
string

Page number for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_size, both page_size and page_number will be defaulted to 1000 and 1. Results are sorted decending order of the created date & time.

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/investment-products/v1?status=SOME_STRING_VALUE&page_size=SOME_STRING_VALUE&page_number=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "investment_products": [
    ],
  • "next_page_available": true
}

Get current prices of all investment products

Returns current prices of all the investment products configured for this tenancy

Authorizations:
ApiSecretKey
query Parameters
page_size
string

Page size for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_number, both page_size and page_number will be defaulted to 1000 and 1. Max page size is 15000. Results are sorted decending order of the created date & time.

page_number
string

Page number for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_size, both page_size and page_number will be defaulted to 1000 and 1. Results are sorted decending order of the created date & time.

status
string
Enum: "active" "inactive"

status of investment product. If empty will return all investment products.

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/investment-products/v1/current-prices?page_size=SOME_STRING_VALUE&page_number=SOME_STRING_VALUE&status=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "investment_product_unit_prices": [
    ],
  • "next_page_available": true
}

Get details of a given investment product

Returns the requested investment product

Authorizations:
ApiSecretKey
path Parameters
investment_product_id
required
string

Investment Product ID

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url https://web_host_name/tenant/investment-products/v1/%7Binvestment_product_id%7D \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "investment_product_id": "MAX2854",
  • "id_type": "ISIN",
  • "name": "Canada Life Canadian Growth T5",
  • "asset_type": "funds",
  • "asset_sub_type": "Canadian Open End",
  • "currency": "CAD",
  • "pricing_method": "NAV",
  • "fund_asset_type": "Mutual Funds",
  • "fund_code": "MAX2854",
  • "applicable_financial_products": [
    ],
  • "settlement_date_offset": 3,
  • "status": "active",
  • "close_price": "12.745",
  • "close_price_on_date": "2021-09-03",
  • "additional_provider_details": { },
  • "created_at": "2020-07-08T07:36:05.884Z",
  • "updated_at": "2020-07-10T07:36:05.884Z"
}

Get current price of an investment product

Returns current price of the requested investment product

Authorizations:
ApiSecretKey
path Parameters
investment_product_id
required
string

Investment Product ID

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url https://web_host_name/tenant/investment-products/v1/%7Binvestment_product_id%7D/current-price \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "investment_product_id": "FUND345",
  • "current_price": "45.78",
  • "currency": "GBP",
  • "price_on_date": "2019-08-24"
}

Cash Investment Products

Cash Investment Products (e.g., term deposits, instant access accounts, notice accounts, etc.) provide an opportunity for individuals to invest their cash securely while earning interest offered by a financial institution (e.g., banks). These products are designed to cater to different savings needs of the users.

The Cash Investment Products endpoint provides access to all available savings products offered by a counterparty, which includes details of their interest rates, interest calculation details, availability and terms and conditions. The wealth manager defines the range of supported cash investment products via the Admin UI.

Get all cash investment products

This endpoint enables users to retrieve details of cash investment products.

Authorizations:
ApiSecretKey
query Parameters
page_size
string

Page size for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_number, both page_size and page_number will be defaulted to 1000 and 1. Max page size is 3000.

page_number
string

Page number for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_size, both page_size and page_number will be defaulted to 1000 and 1.

sort
string
Default: "desc"
Enum: "asc" "desc"

Sorting order; results are sorted by creation time.

status
string
Enum: "active" "inactive" "discontinued"

Status of product

asset_sub_type
string
Enum: "term_deposit" "notice_deposit" "instant_deposit"

Asset sub type of the product

counterparty
string

The party who offers the investment product

enabled_third_parties
string
enabled_account_types
string
Enum: "individual" "power_of_attorney" "court_of_protection" "sipp" "ssas" "trust" "business" "charity" "partnership" "sole_trader"
header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/cash-investment-products/v1?page_size=SOME_STRING_VALUE&page_number=SOME_STRING_VALUE&sort=SOME_STRING_VALUE&status=SOME_STRING_VALUE&asset_sub_type=SOME_STRING_VALUE&counterparty=SOME_STRING_VALUE&enabled_third_parties=SOME_STRING_VALUE&enabled_account_types=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "cash_investment_products": [
    ],
  • "next_page_available": true
}

Get details of a given cash investment product

Returns the requested cash investment product.

Authorizations:
ApiSecretKey
path Parameters
investment_product_id
required
string

Cash Investment Product ID

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url https://web_host_name/tenant/cash-investment-products/v1/%7Binvestment_product_id%7D \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "asset_type": "cash_investments",
  • "asset_sub_type": "term_deposit",
  • "investment_product_id": "CASHINV-AHY58878",
  • "investment_product_name": "HSBC 3 months term deposit",
  • "counterparty": "CPY-AHY58878",
  • "currency": "GBP",
  • "notice_period": 1,
  • "maturity_period": {
    },
  • "interest_type": "fixed",
  • "interest_rates": [
    ],
  • "interest_accrual_frequency": "daily",
  • "interest_compound_frequency": "monthly",
  • "interest_credit_frequency": "monthly",
  • "interest_credit_instruction": "credit_to_pot",
  • "minimum_investment": "10000",
  • "maximum_investment": "100000",
  • "minimum_balance": "1000",
  • "top_up_configurations": {
    },
  • "revenue_mode": {
    },
  • "withdrawal_type": "none",
  • "enabled_third_parties": [
    ],
  • "enabled_account_types": [
    ],
  • "flags": {
    },
  • "status": "active",
  • "activation_date": "2024-09-08T07:36:05.884Z",
  • "inactivation_date": "2024-10-08T07:36:05.884Z",
  • "discontinuation_date": "2024-11-08T07:36:05.884Z",
  • "attachments": [
    ],
  • "created_at": "2024-09-08T07:36:05.884Z",
  • "updated_at": "2024-09-10T07:36:05.884Z"
}

Payments

The Payments endpoint allows you to put cash into a specific pot in your account by sending a payment intent. This intent must capture the following information regarding the payment:

  • Details regarding payment such as the amount to collect and the currency
  • Supported payment_type (card payments, electronic fund transfers etc.).
  • Associated key information to track a payment (e.g. pot_id).
  • Intention of payment:
    • Cash into the pot only, do not invest (purpose: "cash")
    • Invest based on the portfolio attached to the investor (purpose: "invest" and investment_instructions not populated)
    • Invest based on attached instructions (purpose: "invest" and investment_instructions populated). If the pot has a portfolio attached, then the priority will be given to investment instructions. If the investment instructions apply only for a propotion of money coming in, then the rest will be added as cash.

Additionaly, if the service_provider is given as "truelayer" accept an extra object service_provider_params where you have to provide the bank_account_id as a key-value pair and you will recieve this object in response including the fields, bank_account_id, payment_intent_id and hpp_url. (e.g "service_provider_params: {"bank_account_id": "ba-82faf049...", "payment_intent_id: 91aa9de...", "hpp_url":"https://..."}").

For "stripe", in the response, you will receive the payment_intent_id, client_secret and publishable_key inside that additional object with the value you used for payment_type as its field name. (e.g. "service_provider_params": {"payment_intent_id: 91aa9de...", "client_secret": "pi_XXXXX", "publishable_key": "pk_test_XXXXX", .....}).

These values will be used with the client library for each payment call for the following purposes.

  • payment_intent_id - to uniquely identify your payment intent
  • client_secret - The client secret of the PaymentIntent. Required if a publishable key is used to retrieve the source.
  • publishable_key - to uniquely identify your payment service account
  • hpp_url - The redirect URL for proceed with bank payment (only for Truelayer)

Get all payments

Returns all the Payments setup for the tenant in an array.
Payments can be filtered by the pot_id, payment_type, purpose and service_provider when retrieving payments.

Authorizations:
ApiSecretKey
query Parameters
payment_type
string

Payment type of the payment to be retrieved from the API (electronic_fund_transfer, card, direct_debit, manual, reversal)

service_provider
string

Service provider of the payment to be retrieved from the API (truelayer, stripe, gocardless, none)

purpose
string

Purpose of the payment to be retrieved from the API (cash, invest)

sub_transaction_type
string

Sub transaction types of the payments to be retrieved from the API. Can give multiple sub transaction types as comma separated values. (ex- Lump sum,Regular contribution)

investor_id
string

investor_id of the payments to be retrieved from the API. Can give multiple investor IDs as comma separated values. (ex- inv-XLZ8990,inv-RFT6758)

status
string

status of the payments to be retrieved from the API. Can give multiple statuses as comma separated values. (ex- succeeded,pending_confirmation)

source_id
string

source_id of the payments to be retrieved from the API. Can give multiple source IDs as comma separated values. (ex- cem-BGJ20491,cem-TGY90961)

contribution_id
string

contribution_id of the payments to be retrieved from the API. Can give multiple contribution IDs as comma separated values. (ex- BCV-GH-BUH2965,RCB-GC-RGH2065)

batch_id
string

batch_id of the payments to be retrieved from the API.

pot_id
string

Pot ID

external_transaction_reference
string

A unique reference to the transaction in the external system

page_size
string

Page size for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_number, both page_size and page_number will be defaulted to 1000 and 1. Max page size is 8000. Results are sorted decending order of the created date & time.

page_number
string

Page number for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_size, both page_size and page_number will be defaulted to 1000 and 1. Results are sorted decending order of the created date & time.

sort
string
Default: "desc"
Enum: "asc" "desc"

Sorting order; results are sorted by creation time.

payment_reference
string
header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/payments/v1/?payment_type=SOME_STRING_VALUE&service_provider=SOME_STRING_VALUE&purpose=SOME_STRING_VALUE&sub_transaction_type=SOME_STRING_VALUE&investor_id=SOME_STRING_VALUE&status=SOME_STRING_VALUE&source_id=SOME_STRING_VALUE&contribution_id=SOME_STRING_VALUE&batch_id=SOME_STRING_VALUE&pot_id=SOME_STRING_VALUE&external_transaction_reference=SOME_STRING_VALUE&page_size=SOME_STRING_VALUE&page_number=SOME_STRING_VALUE&sort=SOME_STRING_VALUE&payment_reference=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "payments": [
    ],
  • "next_page_available": true
}

Create single payment intent

Create a new Single Payment Intent for a pot. Applicable payment types and service providers may vary based on different payment paths and financial products.

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
request_id
required
string <uuid>

Unique request ID to ensure idempotency. (ex: UUID)

amount
required
string

Amount as a numeral string with two decimal points. (ex: 1500.00). Minimum allowed amount is 1.00

pot_id
required
string
payment_type
required
string
Enum: "card" "electronic_fund_transfer" "manual"
service_provider
required
string
Enum: "stripe" "truelayer" "none"
object

Parameters based on prerequisites of the selected provider

external_transaction_reference
string

A unique reference to the transaction in the external system

currency
string

Must be a currency configured for the Pot

sub_transaction_type
string
Enum: "Lump sum" "Lump sum - non relievable" "Employer contribution" "Lump sum - third party"

Junior Stocks and Shares ISA pots only accept "Lump sum" payments from 16-17 year old investors or "Lump sum - third party" payments from all investors. For SIPP Accumulation pots, one of the following values must be provided: "Lump sum," "Lump sum - non relievable," or "Employer contribution." All other financial products accept "Lump sum" or if the value is not provided, the system will automatically apply "Lump sum".

source_id
string

Unique ID of the employer or third-party payer. Required for employer contributions.

purpose
required
string
Enum: "cash" "invest"
Array of objects

Mandatory only if purpose:"invest" and pot does not have a portfolio template attached (e.g. An execution-only or direct-to-consumer wealth manager).

payment_reference
string

An external reference associated with the payment

Responses

Request samples

Content type
application/json
{
  • "request_id": "266ea41d-adf5-480b-af50-15b940c2b846",
  • "amount": "2000.00",
  • "pot_id": "pot-UKW3452900",
  • "payment_type": "manual",
  • "service_provider": "none",
  • "currency": "GBP",
  • "sub_transaction_type": "Employer contribution",
  • "source_id": "cem-ASP43560",
  • "purpose": "invest",
  • "investment_instructions": [
    ],
  • "payment_reference": "ABC00030E3A4X"
}

Response samples

Content type
application/json
{
  • "transaction_id": "5badc696-5591-485f-9d7f-428b9b8460c2",
  • "amount": "2000.00",
  • "currency": "GBP",
  • "status": "pending_confirmation",
  • "pot_id": "pot-UKW3452900",
  • "payment_type": "manual",
  • "service_provider": "none",
  • "sub_transaction_type": "Employer contribution",
  • "source_id": "cem-ASP43560",
  • "purpose": "invest",
  • "investment_instructions": [
    ],
  • "payment_reference": "ABC00030E3A4X"
}

Get payment by transaction ID

Get Payment by transaction ID

Authorizations:
ApiSecretKey
path Parameters
transaction_id
required
string

Transaction ID

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url https://web_host_name/tenant/payments/v1/%7Btransaction_id%7D \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "transaction_id": "75d65d2b-60c6-45ad-979d-0e3e403e6c7e",
  • "investor_id": [
    ],
  • "amount": "20000",
  • "currency": "GBP",
  • "status": "pending_confirmation",
  • "pot_id": "pot-UKW3452900",
  • "payment_type": "manual",
  • "service_provider": "none",
  • "sub_transaction_type": "Employer contribution",
  • "purpose": "cash",
  • "payment_reference": "ABC00030E3A4X",
  • "origin": "api"
}

Update payment status

Enables users to update the status of an existing payment. Users can move the payments that are in processing state to succeeded ,cancelled or failed status using this endpoint.

Authorizations:
ApiSecretKey
path Parameters
transaction_id
required
string

Unique identifier for the transaction

header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
status
required
string
Enum: "succeeded" "cancelled" "failed"
reason
string <= 100 characters

This field is populated when the status is failed or cancelled, with reason for failure or cancellation

Responses

Request samples

Content type
application/json
{
  • "status": "succeeded"
}

Response samples

Content type
application/json
{
  • "transaction_id": "04d3fd76-2ea9-4afe-9aeb-0acc21fff8a3",
  • "amount": "2000.00",
  • "currency": "GBP",
  • "status": "succeeded",
  • "pot_id": "pot-UKW3452900",
  • "payment_type": "manual",
  • "service_provider": "none",
  • "sub_transaction_type": "Employer contribution",
  • "origin": "api",
  • "external_transaction_reference": "Ref_1202",
  • "purpose": "invest",
  • "investment_instructions": [
    ],
  • "payment_reference": "ABC00030E3A4X"
}

Create payment batch

This endpoint enables users to create a series of payment instructions under a single batch. It will streamlines the process of disbursing funds to multiple investors (employees) and create single payment intents for each employee based on the amount ,currency and purpose provided by the employer via this request.

A single payment batch can contain up to 600 individual payments. The payments will be evaluated and processed once the request is accepted and the status of payments can be retrieved via payment batch GET end points. If at least one payment fails validations, then the entire payment batch will be rejected. The failure reasons will be included in GET end points in this instance.

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
request_id
required
string <uuid>

Unique request ID to ensure idempotency. (ex: UUID)

source_type
string
Enum: "workplace_employer" "third_party_payer"

Type of the contributor of the payment. Required if the source_id is populated in any level.

source_id
string

Unique ID of the employer. Required if the source_type is "workplace_employer".

currency
required
string

Must be a currency configured for the tenant. Currency of the payments.

amount
required
string

Amount as a numeral string with two decimal points. (ex: 1500.00). Should be equal to the total aggregated amount of individual payments in the batch.

payment_type
required
string
Value: "manual"
batch_payment_reference
string

Unique reference of the batch payment

required
Array of objects

Information of individual payment of the bulk payments request.

Responses

Request samples

Content type
application/json
{
  • "request_id": "266ea41d-adf5-480b-af50-15b940c2b846",
  • "source_type": "workplace_employer",
  • "source_id": "wem-RHZ59189",
  • "currency": "GBP",
  • "amount": "8000.00",
  • "payment_type": "manual",
  • "batch_payment_reference": "REF189393",
  • "payments": [
    ]
}

Response samples

Content type
application/json
{
  • "batch_id": "BULKPAY-AHYL8878",
  • "source_type": "workplace_employer",
  • "source_id": "wem-RHZ59189",
  • "currency": "GBP",
  • "amount": "8000.00",
  • "payment_type": "manual",
  • "status": "pending",
  • "batch_payment_reference": "REF189393",
  • "payments": [
    ]
}

Get all payment batches

This endpoint enables users to retrieve details of payment batches.

Authorizations:
ApiSecretKey
query Parameters
created_date
string

Date the payment batch was created. Should be on YYYY-MM-DD format

status
string
Enum: "pending" "payments_creation_failed" "payments_created" "payments_settlement_in_progress" "payments_settled" "payments_partially_settled" "payments_settlement_failed"

Status of payment batch. One or more of the statuses defined for a payment batch. Multiple statuses can be provided in a single request

include_details
string
Default: true
Enum: "true" "false"

Decide whether to retrieve all batch payments with information or only batch_id values of payment batches

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/bulk-payments/v1/?created_date=SOME_STRING_VALUE&status=SOME_STRING_VALUE&include_details=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "payment_batches": [
    ]
}

Get payments by batch ID

This endpoint enables users to retrieve information of a payment batch using the batch_id.

Authorizations:
ApiSecretKey
path Parameters
batch_id
required
string

Batch ID

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url https://web_host_name/tenant/bulk-payments/v1/%7Bbatch_id%7D \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "batch_id": "BULKPAY-AHYL8879",
  • "source_id": "wem-ASP43562",
  • "currency": "GBP",
  • "amount": "10000.00",
  • "payment_type": "manual",
  • "status": "payments_partially_settled",
  • "batch_payment_reference": "REF189393",
  • "source_type": "workplace_employer",
  • "payments": [
    ]
}

Recurring Contributions

The recurring contribution endpoints allow a tenant to manage their investors regular contribution requests.

Get all recurring contributions

Returns all the recurring contributions set up for investors in an array.
Recurring Contributions can be requested using filters contribution_id, pot_id, investor_id, payment_type, sub_transaction_type, financial_product_id and status or a combination of these filters.

Authorizations:
ApiSecretKey
query Parameters
contribution_id
string

Contribution ID

pot_id
string

Pot ID

financial_product_id
string

Financial Product ID

investor_id
string

Investor ID

payment_type
string
Enum: "direct_debit" "manual"

Payment type of the payment to be retrieved from the API

sub_transaction_type
string
Enum: "Regular contribution" "Regular contribution - non relievable" "Regular contribution - Employer"

Sub Transaction Type of the recurring contribution

status
string
Enum: "Pending" "Active" "Finished" "Rejected" "Paused" "Cancelled"

Status of the recurring contribution

page_size
string

Page size for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_number, both page_size and page_number will be defaulted to 1000 and 1. Max page size is 8000. Results are sorted decending order of the created date & time.

page_number
string

Page number for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_size, both page_size and page_number will be defaulted to 1000 and 1. Results are sorted decending order of the created date & time.

sort
string
Default: "desc"
Enum: "asc" "desc"

Sorting order; results are sorted by creation time.

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/recurring-contributions/v1?contribution_id=SOME_STRING_VALUE&pot_id=SOME_STRING_VALUE&financial_product_id=SOME_STRING_VALUE&investor_id=SOME_STRING_VALUE&payment_type=SOME_STRING_VALUE&sub_transaction_type=SOME_STRING_VALUE&status=SOME_STRING_VALUE&page_size=SOME_STRING_VALUE&page_number=SOME_STRING_VALUE&sort=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "recurring_contributions": [
    ],
  • "next_page_available": true
}

Create recurring contribution

Create a new recurring payment for an investor pot to manage and trigger payments on a pre-defined schedule. Recurring payments can be set up either through a chosen service provider or managed manually by the system.

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
request_id
required
string <uuid>

Unique request ID to ensure idempotency. (ex: UUID)

contribution_name
required
string <= 100 characters

User given identifier for the contribution

pot_id
required
string

Pot ID of investor to direct the payment

financial_product_id
required
string

Financial Product ID

investor_id
required
string

Investor ID of the investor making the contribution. For a joint pot, Investor ID of the party making contribution should be included.

amount
required
string

Amount as a numeral string with two decimal points. (ex: 1500.00) Should be greater than or equal to the minimum investment for the financial product.

sub_transaction_type
required
string
Enum: "Regular contribution" "Regular contribution - non relievable" "Regular contribution - Employer"

Sub transaction type for recurring contribution. Regular contribution - non relievable and Regular contribution - Employer are only allowed for pots linked to SIPP Accumulation product type

currency
required
string

Must be a currency configured for the Pot

payment_type
required
string
Enum: "direct_debit" "manual"

Type of payment. Select “manual” to manage payments through the system without a service provider.

service_provider
required
string
Enum: "gocardless" "none"

Service provider managing the recurring payment subscription or select “none“ to manage payments through the system without a service provider.

purpose
required
string
Enum: "cash" "invest"

invest option is allowed only if investment_instructions given or a portfolio is attached, if not the purpose should be cash.

Array of objects

Mandatory only if purpose:"invest" and pot does not have a portfolio template attached (e.g. An execution-only or direct-to-consumer wealth manager).

source_id
string

Required only for payments intents for employer contributions made towards SIPP Accumulation Products

required
object

Parameters based on payment schedule

Responses

Request samples

Content type
application/json
{
  • "request_id": "266ea41d-adf5-480b-af50-15b940c2b846",
  • "contribution_name": "Contributions to SIPP",
  • "pot_id": "pot-UKW3452900",
  • "financial_product_id": "sipp_accumulation",
  • "investor_id": "inv-XUT11333",
  • "amount": "2000.00",
  • "sub_transaction_type": "Regular contribution - Employer",
  • "currency": "GBP",
  • "payment_type": "direct_debit",
  • "service_provider": "gocardless",
  • "purpose": "invest",
  • "investment_instructions": [
    ],
  • "source_id": "cem-ASP43560",
  • "payment_schedule": {
    }
}

Response samples

Content type
application/json
{
  • "contribution_id": "RCB-GC-AB24DE7",
  • "contribution_name": "Contributions to SIPP",
  • "pot_id": "pot-UKW3452900",
  • "financial_product_id": "sipp_accumulation",
  • "investor_id": "inv-XUT11333",
  • "amount": "2000.00",
  • "sub_transaction_type": "Regular contribution - Employer",
  • "currency": "GBP",
  • "payment_type": "direct_debit",
  • "service_provider": "gocardless",
  • "purpose": "invest",
  • "investment_instructions": [
    ],
  • "source_id": "cem-ASP43560",
  • "payment_schedule": {
    },
  • "service_provider_params": {
    },
  • "status": "Pending",
  • "created_at": "2019-08-24T14:15:22Z",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "reference_version": 1
}

Update recurring contribution

Update an active recurring payment that is set up in the system.

Authorizations:
ApiSecretKey
path Parameters
contribution_id
required
string

Contribution ID

header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
amount
string

Amount as a numeral string with two decimal points. (ex: 1500.00) Should be greater than or equal to the minimum investment for the financial product.

contribution_name
string <= 100 characters

User given identifier for the contribution

reference_version
integer

Responses

Request samples

Content type
application/json
{
  • "amount": "1500.00",
  • "contribution_name": "New contributions to SIPP",
  • "reference_version": 1
}

Response samples

Content type
application/json
{
  • "status": "Active",
  • "service_provider_params": {
    },
  • "next_payment_dates": [
    ],
  • "contribution_name": "New contributions to SIPP",
  • "amount": "1500.00",
  • "reference_version": 2,
  • "created_at": "2023-08-17T08:35:40.041Z",
  • "updated_at": "2023-09-17T08:35:40.041Z",
  • "value": {
    }
}

Pause recurring contribution

Pause a recurring payment setup in the system. Recurring payments with the status ‘Active' can be paused through this endpoint.

Authorizations:
ApiSecretKey
path Parameters
contribution_id
required
string

Contribution ID

header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
pause_cycles
integer

The number of cycles to pause a subscription for. A cycle is one duration of interval and interval_unit. This should be a non zero positive value.

Responses

Request samples

Content type
application/json
{
  • "pause_cycles": 1
}

Response samples

Content type
application/json
{
  • "status": "Paused",
  • "service_provider_params": {
    },
  • "next_payment_dates": [
    ],
  • "value": {
    }
}

Resume recurring contribution

Resume a paused recurring payment that is set up in the system. Recurring payments with the status ‘Paused' can be resumed through this endpoint.

Authorizations:
ApiSecretKey
path Parameters
contribution_id
required
string

Contribution ID

header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "status": "Active",
  • "service_provider_params": {
    },
  • "next_payment_dates": [
    ],
  • "value": {
    }
}

Cancel recurring contribution

Cancel a recurring payment setup in the system. Recurring payments with the status ‘Active', ‘Resumed’ or 'Paused’ can be cancelled through this endpoint. Cancelled payments cannot be active again.

Authorizations:
ApiSecretKey
path Parameters
contribution_id
required
string

Contribution ID

header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
reason
string <= 200 characters

Reason to cancel the recurring payment.

Responses

Request samples

Content type
application/json
{
  • "reason": "Cancelling due to payment failures"
}

Response samples

Content type
application/json
{
  • "status": "Cancelled",
  • "reason": "Cancelling due to payment failures",
  • "service_provider_params": {
    },
  • "created_at": "2023-08-17T08:35:40.041Z",
  • "updated_at": "2023-09-17T08:35:40.041Z",
  • "reference_version": 1,
  • "value": {
    }
}

Transactions

The "Transactions" endpoint grouping encompasses various endpoints associated with transactions. This section includes a collection of endpoints that facilitate creation and retrieval of different types of transactions.

A transaction to buy or sell an investment product can be specified in units (i.e. buy/sell n number of units of the investment product) or as a value (i.e. buy/sell up to n value of the investment product). Also, these endpoints support single or bulk buy/sell transactions.

Retrieve all transactions

The "Retrieve All Transactions” endpoint enables users to retrieve any transaction as per their specific requirements. Users have the flexibility to filter and obtain a particular transaction by providing a transaction ID / parent transaction ID/ aggregated transaction ID or filter out a specific set of transactions based on various criteria such as the sub transaction type, investor, account, pot, status, or creation within a specified time period.

Authorizations:
ApiSecretKey
query Parameters
transaction_id
string

Unique identifier for the transaction

parent_transaction_id
string

Unique identifier for parent transaction

aggregated_transaction_id
string

Unique identifier for the aggregated transaction

external_transaction_reference
string

A unique reference to the transaction in the external system

investor_id
string

Investor ID

account_id
string

Account ID

pot_id
string

Pot ID

sub_transaction_type
string

Sub transaction type

sub_type
string

Status of the transaction. Multiple statuses as comma separated string can be entered

start_date
string

The start date of the transactions to be retrieved from the API. Should be on YYYY-MM-DD format

end_date
string

The end date of the transactions to be retrieved from the API. Should be on YYYY-MM-DD format

page_size
string

Page size for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_number, both page_size and page_number will be defaulted to 1000 and 1. Max page size is [4000]. Results are sorted descending order of the created date & time

page_number
string

Page number for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_size, both page_size and page_number will be defaulted to 1000 and 1. Results are sorted descending order of the created date & time

sort
string
Enum: "asc" "desc"

Sorting order; results are sorted by creation time.

updated_date
string

The date the transactions were last updated. Should be on YYYY-MM-DD format.

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/transactions/v1/?transaction_id=SOME_STRING_VALUE&parent_transaction_id=SOME_STRING_VALUE&aggregated_transaction_id=SOME_STRING_VALUE&external_transaction_reference=SOME_STRING_VALUE&investor_id=SOME_STRING_VALUE&account_id=SOME_STRING_VALUE&pot_id=SOME_STRING_VALUE&sub_transaction_type=SOME_STRING_VALUE&sub_type=SOME_STRING_VALUE&start_date=SOME_STRING_VALUE&end_date=SOME_STRING_VALUE&page_size=SOME_STRING_VALUE&page_number=SOME_STRING_VALUE&sort=SOME_STRING_VALUE&updated_date=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "transactions": [
    ],
  • "next_page_available": true
}

Create transaction

This endpoint enables users to create a transaction on WealthOS platform. A successful request will result in the creation of a transaction and updates to holdings. The system will return the transaction_id and other transaction details.

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
request_id
required
string

Unique request id to ensure idempotency. (ex: UUID)

external_transaction_reference
string

A unique reference to the transaction in the external system

sub_transaction_type
required
string
Enum: "Buy" "Sell" "Withdrawal" "Interest"

Sub transaction type. Withdrawal is only supported for ISA financial product

pot_id
required
string

Pot ID

currency
required
string

Currency of the transaction

investment_product_id
string

Investment product id of the transaction. Mandatory only if sub_transaction_type: Buy or Sell

execution_price
string

Executed price of the Buy/Sell transaction. Up to 4 decimal values. Mandatory only if sub_transaction_type: Buy or Sell

transaction_quantity
string

Traded investment product quantity for Buy/Sell transactions. Mandatory only if sub_transaction_type: Buy or Sell

effective_transaction_value
string

The adjusted value of the transaction after considering cost of the transaction. This value will update the pot/account balances of the investor. Mandatory only if sub_transaction_type: Buy or Sell

transaction_value
string

Value of the transaction. Up to 2 decimal values. Mandatory only if sub_transaction_type: Withdrawal or Interest

trade_date
string

Date the trade was taken executed. Mandatory only if sub_transaction_type: Buy or Sell

settlement_date
required
string

Actual settled day of the transaction. settlement_date must be either the current date or a past date.

Responses

Request samples

Content type
application/json
{
  • "request_id": "266ea41d-adf5-480b-af50-15b940c2b860",
  • "external_transaction_reference": "412917b0-92b0-4d44-812e-bb715bd4df40",
  • "sub_transaction_type": "Buy",
  • "pot_id": "pot-UKW3452850",
  • "currency": "GBP",
  • "investment_product_id": "EPCCTST7",
  • "transaction_quantity": "10.45",
  • "execution_price": "25.0000",
  • "effective_transaction_value": "260.85",
  • "trade_date": "2024-07-24",
  • "settlement_date": "2024-07-24"
}

Response samples

Content type
application/json
{
  • "transaction_id": "b8084c32-f466-4c18-a88a-2f9ace0fe3fe",
  • "external_transaction_reference": "412917b0-92b0-4d44-812e-bb715bd4df40",
  • "sub_transaction_type": "Buy",
  • "pot_id": "pot-UKW3452850",
  • "currency": "GBP",
  • "investment_product_id": "EPCCTST7",
  • "transaction_quantity": "10.45",
  • "execution_price": "25.0000",
  • "effective_transaction_value": "260.85",
  • "trade_date": "2024-07-24",
  • "settlement_date": "2024-07-24",
  • "origin": "api",
  • "created_at": "2024-07-24T05:07:03.374Z",
  • "updated_at": "2024-07-24T05:07:03.374Z"
}

Execute buy transaction(s)

Invoke execution of one or more buy transactions as defined in the request

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
request_id
required
string <uuid>

Unique request ID to ensure idempotency. (ex: UUID)

pot_id
required
string
required
Array of objects (Instruction(buy|sell))

Responses

Request samples

Content type
application/json
{
  • "request_id": "266ea41d-adf5-480b-af50-15b940c2b846",
  • "pot_id": "pot-UKW3452850",
  • "investment_instructions": [
    ]
}

Response samples

Content type
application/json
{
  • "status": "partially_success",
  • "pot_id": "pot-UKW3452850",
  • "results": [
    ]
}

Execute sell transaction(s)

Invoke execution of one or more Sell transactions as defined in the request

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
request_id
required
string <uuid>

Unique request ID to ensure idempotency. (ex: UUID)

pot_id
required
string
Array of objects (Instruction(buy|sell))

Responses

Request samples

Content type
application/json
{
  • "request_id": "266ea41d-adf5-480b-af50-15b940c2b846",
  • "pot_id": "pot-UKW3452850",
  • "sell_instructions": [
    ]
}

Response samples

Content type
application/json
{
  • "status": "partially_success",
  • "pot_id": "pot-UKW3452850",
  • "results": [
    ]
}

Switch Instruction

The Switch Instruction endpoints allow you to switch existing holdings (cash and investment products) to a new set of investment products via a single instruction. You can specify the holdings you want to sell along with a mode and value (e.g. number of units to be sold, total value of holding to be sold or % of holding to be sold) and the investment products you want to buy (using the proceeds of the sales and and/or free cash available in the pot). The buy instructions can also be specified with a mode and value (e.g. number of units to buy, total value of holding to be bought or % of proceeds to be used to buy specific investment product).

You can view the status of your switch instruction at any point through the API (both the overall 'parent' switch instruction as well as the individual 'child' buy/sell transactions).

Retrieve switch instruction from switch ID

Retrieve the status of an existing switch instruction from the switch_transaction_id. If the status of the individual buy/sell transactions are required, you must send the request with include_details = true.

Authorizations:
ApiSecretKey
query Parameters
switch_transaction_id
required
string

Unique identifier of the switch instruction

include_details
boolean

If set to true details of individual buy and sell (child) transactions will be included

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/transactions/v1/switch?switch_transaction_id=SOME_STRING_VALUE&include_details=SOME_BOOLEAN_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "status": "sell_in_progress",
  • "switch_transaction_id": "def85ee2-c98d-44d8-a644-c91caa84fa6e",
  • "pot_id": "pot-UKW3452855",
  • "sell_instructions": [
    ],
  • "buy_instructions": [
    ],
  • "transactions": [
    ],
  • "origin": "api",
  • "created_at": "2023-01-29T23:33:06.678Z",
  • "updated_at": "2023-01-29T23:33:06.678Z",
  • "reason": "string"
}

Execute switch instruction

Send a switch instruction with details of the investment products to be sold, free cash to be used (if any) and investment products to be bought.

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
request_id
required
string <uuid>

Unique request ID to ensure idempotency. (eg: UUID)

pot_id
required
string

Identifier of the pot the instruction is sent to

required
Array of objects (each buy or sell instruction of the Switch request)
required
Array of objects (each buy or sell instruction of the Switch request)

Responses

Request samples

Content type
application/json
{
  • "request_id": "266ea41d-adf5-480b-af50-15b940c2b846",
  • "pot_id": "pot-UKW3452855",
  • "sell_instructions": [
    ],
  • "buy_instructions": [
    ]
}

Response samples

Content type
application/json
{
  • "status": "sell_in_progress",
  • "switch_transaction_id": "def85ee2-c98d-44d8-a644-c91caa84fa6e",
  • "pot_id": "pot-UKW3452855",
  • "origin": "api",
  • "sell_instructions": [
    ],
  • "buy_instructions": [
    ]
}

Rebalance

The rebalancing feature provides advisors and portfolio managers the ability to evaluate which pots have drifted significantly from their target portfolios, and trigger a rebalance execution for these pots to bring the holdings back to parity with the pot's target portfolio. Driven by a single rebalance request, the system completely orchestrates this multi-day buy/sell process across a host of different pots, with status updates being provided via API endpoints and web sockets.

Evaluate rebalance

Evaluate if a pot or a group of pots has deviated significatly from the target portfolio and eligible for rebalancing. The request can be sent for a pot (or a group of pots), all pots belonging to an investor (or a group of investors) or all pots linked to a portfolio (or a group of portfolios). The response will indicate if the pot is eligible for rebalance and % deviation from the target portfolio template.

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
request_id
required
string <uuid>

Unique request ID to ensure idempotency. (eg: UUID)

type
required
string
Enum: "pot" "investor" "portfolio"

Rebalance request triggering type. This describe the types of elements included in the values field

values
required
Array of strings

List of unique IDs from the mentioned type to trigger the rebalance process

Responses

Request samples

Content type
application/json
{
  • "request_id": "266ea41d-adf5-480b-af50-15b940c2b846",
  • "type": "pot",
  • "values": [
    ]
}

Response samples

Content type
application/json
{
  • "rebalance_request_id": "re-d3b39bc2-0ff5-40c0-9575-f5139b959c1b",
  • "status": "processing",
  • "created_at": "2019-08-24T14:15:22Z"
}

Retrieve rebalance evaluation request details

Retrieve details of a rebalace evaluation request using the rebalance_request_id.

Authorizations:
ApiSecretKey
query Parameters
rebalance_evaluation_id
required
string

Unique identifier of the rebalance evaluation request

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/pots/v1/rebalance-evaluation-status?rebalance_evaluation_id=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "rebalanceEvaluation": {
    },
  • "next_page_available": true
}

Trigger rebalance process

This endpoint allows you to trigger the rebalancing of a pot (or a group of pots), all pots belonging to an investor (or a group of investors) or all pots linked to a portfolio (or a group of portfolios). The response will contain a rebalance_request_id and status of the request.

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
request_id
required
string <uuid>

Unique request ID to ensure idempotency. (eg: UUID)

type
required
string
Enum: "pot" "investor" "portfolio"

Rebalance request triggering type. This describe the types of elements included in the values field

values
required
Array of strings

List of unique IDs from the mentioned type to trigger the rebalance process

Responses

Request samples

Content type
application/json
{
  • "request_id": "266ea41d-adf5-480b-af50-15b940c2b846",
  • "type": "pot",
  • "values": [
    ]
}

Response samples

Content type
application/json
{
  • "rebalance_request_id": "fh584838fff",
  • "status": "processing",
  • "created_at": "2019-08-24T14:15:22Z"
}

Retrieve rebalance request details

Retrieve details of a rebalace request using the rebalance_request_id.

Authorizations:
ApiSecretKey
query Parameters
rebalance_request_id
required
string

Unique identifier of the rebalance request

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/pots/v1/rebalance-results?rebalance_request_id=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "rebalanceExecution": {
    },
  • "next_page_available": true
}

Rates

Wealth Managers require various types of rates (e.g. spot fx rates, interest rates) for valuations, currency conversations etc.

The Rates endpoint returns all the configured rate types along with the latest available rate.

Get configured rates

Returns rate details of the requested rate type.

Authorizations:
ApiSecretKey
query Parameters
rate_type
required
string
Value: "fx-spot"

Type of Rate

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/rates/v1?rate_type=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "rates": [
    ]
}

Fees

The Fees endpoints allow a wealth manager to manage fees in terms of creating and charging an external fee or retrieving information on fee configurations setup in the system for recurring fee computations.

Get fee codes (BETA)

This feature is currently in BETA mode

Returns the fee codes setup in the system for recurring fee computations.

Authorizations:
ApiSecretKey
query Parameters
fee_codes
string

Fee codes to be retrieved from the API. Can give multiple fee codes as comma separated values. (ex- FF_50,PF_75)

status
string

Status of the fee code to be retrieved from the API (Active, Inactive)

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/fees/v1/codes?fee_codes=SOME_STRING_VALUE&status=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "fee_codes": [
    ]
}

Get fee setups (BETA)

This feature is currently in BETA mode

Returns the fee types in the system for recurring fee computations set up at Investor, Financial Product and Portfolio levels.

Authorizations:
ApiSecretKey
query Parameters
fee_calculation_entity
string

Level at which the recurring fee sub transaction type is setup. Can give multiple fee calculation entities as comma separated values to be retrieved via the API.(Options - Investor, Financial Product, Portfolio, Investor Account)

fee_calculation_method
string

Fee calculation method used for fee computation for this fee sub transaction type to be retrieved via the API.(Options - Daily Accrual)

sub_transaction_type
string

Fee Sub transaction type set up for the entity. Can give multiple Sub transaction types as comma separated values.(ex- Service fees,Platform fees)

fee_codes
string

Fee codes of the fee setup to be retrieved from the API. Can give multiple fee codes as comma separated values.(ex- FF_50,PF_75)

assigned_to
string

Instances of the entity for which the fee sub transaction type is setup.(Options - All, a single instance, or an array of instances of the entity)

start_date
string <date>

Start date of the fee setup to be retrieved from the API. Should be on YYYY-MM-DD format.

end_date
string <date>

End date of the fee setup to be retrieved from the API. Should be on YYYY-MM-DD format.

status
string

Status of the fee code to be retrieved from the API (Active, Inactive)

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/fees/v1/setups?fee_calculation_entity=SOME_STRING_VALUE&fee_calculation_method=SOME_STRING_VALUE&sub_transaction_type=SOME_STRING_VALUE&fee_codes=SOME_STRING_VALUE&assigned_to=SOME_STRING_VALUE&start_date=SOME_STRING_VALUE&end_date=SOME_STRING_VALUE&status=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "fee_setups": [
    ]
}

Get fee exemptions (BETA)

This feature is currently in BETA mode

Returns the asset exclusions in the system for recurring fee computations set up at Investor, Financial Product and Portfolio levels.

Authorizations:
ApiSecretKey
query Parameters
fee_exemption_entity
string

Level at which the recurring fee sub transaction type is setup. Can give multiple fee exemption entities as comma separated values to be retrieved via the API.(Options - Investor,Financial Product,Portfolio)

sub_transaction_type
string

Fee Sub transaction type set up for the entity. Can give multiple Sub transaction types as comma separated values.(ex- Service fees,Platform fees)

assigned_to
string

Instances of the entity for which the fee sub transaction type is setup.(Options - All or a single instance )

start_date
string <date>

Start date of the fee setup to be retrieved from the API. Should be on YYYY-MM-DD format.

end_date
string <date>

End date of the fee setup to be retrieved from the API. Should be on YYYY-MM-DD format.

status
string

Status of the fee code to be retrieved from the API (Active, Inactive)

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/fees/v1/exemptions?fee_exemption_entity=SOME_STRING_VALUE&sub_transaction_type=SOME_STRING_VALUE&assigned_to=SOME_STRING_VALUE&start_date=SOME_STRING_VALUE&end_date=SOME_STRING_VALUE&status=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "fee_exemptions": [
    ]
}

Create fee transaction

This endpoint supports the creation of a single fee deduction from an investor's pot. A sucessful fee creation will result in the creation of a fee transaction and updates to holdings. The system will return the transaction_id and other fee transaction details.

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
request_id
required
string <uuid>

Unique request ID to ensure idempotency. (ex: UUID)

pot_id
required
string <= 64 characters

Pot ID

currency
required
string

Currency of the Fee. It must be a currency configured for the pot.

transaction_value
required
string

Fee Amount upto 2 decimal places

sub_transaction_type
required
string
Enum: "Ancillary fee" "Advisor ongoing fee" "One-off advisor fee" "Custody fees" "Commission" "Management fee" "Fee credit" "Fee rebate" "Commission rebate"

If the pot is a pension pot only Ancillary fee, Advisor ongoing fee, One-off advisor fee, Custody fees and Commission will be valid sub transaction types

Responses

Request samples

Content type
application/json
{
  • "request_id": "266ea41d-adf5-480b-af50-15b940c2b846",
  • "pot_id": "pot-UKW3459999",
  • "currency": "GBP",
  • "transaction_value": "123.45",
  • "sub_transaction_type": "Custody fees"
}

Response samples

Content type
application/json
{
  • "transaction_id": "378f7443-515c-4947-be3f-e7bd51be68c2",
  • "investment_product_id": "cash",
  • "transaction_value": "123.45",
  • "pot_id": "pot-UKW3459999",
  • "primary_transaction_type": "Fees",
  • "sub_transaction_type": "Custody fees",
  • "type": "archived",
  • "sub_type": "settled",
  • "currency": "GBP",
  • "direction": "out",
  • "external_transaction_reference": "string",
  • "created_at": "2023-01-30T00:42:36.624Z",
  • "updated_at": "2023-01-30T00:42:36.624Z",
  • "trade_date": "2023-01-30",
  • "settlement_date": "2023-01-30",
  • "origin": "api",
  • "selldown_triggered": true,
  • "selldown_transaction_details": [
    ]
}

Withdrawals

The Withdrawal endpoint allows an investor to withdraw money from one of his/her pots.

Create single withdrawal

This endpoint supports the creation of a single withdrawal from an investor's pot. A sucessful withdrawal creation will result in the creation of a withdrawal transaction and updates to holdings.

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
request_id
required
string <uuid>

Unique request ID to ensure idempotency. (ex: UUID)

pot_id
required
string <= 64 characters

Pot ID

currency
required
string

Currency of the Withdrawal.must be a currency configured for the Pot

transaction_value
required
string

Withdrawal Amount upto 2 decimal places

sub_transaction_type
required
string
Enum: "Withdrawal" "Income Withdrawal" "Closing withdrawal"

Withdrawal sub transaction type. "Income Withdrawal" sub-transaction type will only applicable for SIPP FAD. "Closing withdrawal" sub-transaction type will only applicable for ISA. "Withdrawal" sub transaction type is applicable for ISA, LISA and GIA.

bank_account_id
required
string

Bank Account ID

Responses

Request samples

Content type
application/json
{
  • "request_id": "266ea41d-adf5-480b-af50-15b940c2b846",
  • "pot_id": "pot-SDQ5659730",
  • "currency": "USD",
  • "transaction_value": "123.45",
  • "sub_transaction_type": "Withdrawal",
  • "bank_account_id": "ba-example-bank-account"
}

Response samples

Content type
application/json
{
  • "transaction_id": "0fec1e58-b197-4052-99cf-2218496c5482",
  • "investment_product_id": "string",
  • "transaction_value": "string",
  • "pot_id": "pot-SDQ5659730",
  • "primary_transaction_type": "Withdrawal",
  • "sub_transaction_type": "Withdrawal",
  • "type": "pending",
  • "sub_type": "scheduled",
  • "currency": "string",
  • "direction": "in",
  • "external_transaction_reference": "string",
  • "created_at": "string",
  • "updated_at": "string",
  • "trade_date": "string",
  • "settlement_date": "string",
  • "origin": "api",
  • "tax_transaction_id": "d2573eae-7b29-48cb-b1b9-ffef5f09db8c",
  • "net_transaction_value": "string",
  • "tax_payable_on_transaction": "string",
  • "total_withdrawal_for_tax_period": "string",
  • "tax_free_allowance_for_tax_period": "string",
  • "additional_pay_ytd": "string",
  • "taxable_withdrawal_for_tax_period": "string",
  • "tax_payable_for_tax_period": "string",
  • "tax_paid_for_tax_period": "string",
  • "tax_unpaid_ytd": "string",
  • "tax_overpaid_ytd": "string",
  • "withdrawal_charge_applicable": true,
  • "withdrawal_charge": "string"
}

Create ufpls withdrawal

This endpoint supports the creation of a ufpls withdrawal from an investor's SIPP Accumulation pot.

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
request_id
required
string <uuid>

Unique request ID to ensure idempotency. (ex: UUID)

investor_id
required
string <= 64 characters

Investor ID

bank_account_id
string

A unique id assigned by the WealthOS system to the bank account of the investor. If not specified, the default bank account of the investor will be considered for the transaction crediting. If a default bank account is not setup specifying a bank account id in the request is mandatory. If a bank account id is specified while there is a bank account id, the specified account id will be taken into effect overriding the default bank account.

required
Array of objects

Array of UFPLS instructions

Responses

Request samples

Content type
application/json
{
  • "request_id": "266ea41d-adf5-480b-af50-15b940c2b846",
  • "investor_id": "inv-SDQ5659730",
  • "bank_account_id": "ba-example-bank-account",
  • "ufpls_instructions": [
    ]
}

Response samples

Content type
application/json
{
  • "ufpls_withdrawal_id": "UFPLS-example-index",
  • "investor_id": "inv-SDQ5659730",
  • "bank_account_id": "ba-example-bank-account",
  • "status": "partially_success",
  • "ufpls_request_information": [
    ],
  • "ufpls_payout": [
    ],
  • "failed_requests": [
    ]
}

Recurring Withdrawals

The recurring withdrawal endpoints allow a tenant to manage regular withdrawals of investor pots.

Create recurring withdrawal

Create a new recurring withdrawal for an investor pot which will be run by the scheduler setup in the system.

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
request_id
required
string <uuid>

Unique request ID to ensure idempotency. (ex: UUID)

withdrawal_name
required
string <= 100 characters

User given identifier for the withdrawal

investor_id
required
string

Investor ID of the investor making the withdrawal. For a joint pot, Investor ID of the party making withdrawal should be included.

pot_id
required
string

Pot ID of investor to direct the withdrawal

bank_account_id
required
string

Bank account ID of the investor where the withdrawn cash will go to

amount
required
string

Amount as a numeral string with two decimal points. (ex: 1500.00) Should be greater than or equal to the minimum withdrawal amount of the financial product.

currency
required
string

Must be a currency configured for the Pot

required
object

Parameters based on withdrawal schedule

Responses

Request samples

Content type
application/json
{
  • "request_id": "266ea41d-adf5-480b-af50-15b940c2b846",
  • "withdrawal_name": "Withdrawals to SIPP",
  • "investor_id": "inv-XUT11265",
  • "pot_id": "pot-GYQ5423100",
  • "bank_account_id": "ba-92yu982d-at6u-4242-9856-83",
  • "amount": "100.00",
  • "currency": "GBP",
  • "withdrawal_schedule": {
    }
}

Response samples

Content type
application/json
{
  • "withdrawal_id": "RCW-AB24DE7",
  • "withdrawal_name": "Withdrawals to SIPP",
  • "investor_id": "inv-AUX11265",
  • "pot_id": "pot-GYQ5423100",
  • "bank_account_id": "ba-92yu982d-at6u-4242-9856-83",
  • "amount": "100.00",
  • "currency": "GBP",
  • "withdrawal_schedule": {
    },
  • "status": "active",
  • "next_withdrawal_date": "2023-05-01T00:00:00.000Z",
  • "created_at": "2023-04-04T15:12:30.000Z",
  • "updated_at": "2023-04-04T15:12:30.000Z",
  • "reference_version": 1
}

Get all recurring withdrawals

Returns all the recurring withdrawals set up for investors in an array.
Recurring Withdrawals can be requested using filters withdrawal_id, pot_id, investor_id, financial_product_id and status or a combination of these filters.

Authorizations:
ApiSecretKey
query Parameters
withdrawal_id
string

Withdrawal ID

pot_id
string

Pot ID

financial_product_id
string

Financial Product ID

investor_id
string

Investor ID

status
string
Enum: "active" "cancelled" "finished"

Status of the recurring withdrawal

page_size
string

Page size for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_number, both page_size and page_number will be defaulted to 1000 and 1. Max page size is 8000. Results are sorted decending order of the created date & time.

page_number
string

Page number for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_size, both page_size and page_number will be defaulted to 1000 and 1. Results are sorted decending order of the created date & time.

sort
string
Default: "desc"
Enum: "asc" "desc"

Sorting order; results are sorted by creation time.

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/recurring-withdrawals/v1?withdrawal_id=SOME_STRING_VALUE&pot_id=SOME_STRING_VALUE&financial_product_id=SOME_STRING_VALUE&investor_id=SOME_STRING_VALUE&status=SOME_STRING_VALUE&page_size=SOME_STRING_VALUE&page_number=SOME_STRING_VALUE&sort=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "recurring_withdrawals": [
    ],
  • "next_page_available": true
}

Update recurring withdrawal

Update an active recurring withdrawal that is set up in the system.

Authorizations:
ApiSecretKey
path Parameters
withdrawal_id
required
string

Withdrawal ID

header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
amount
string

Amount as a numeral string with two decimal points. (ex: 1500.00) Should be greater than or equal to the minimum withdrawal amount of the financial product.

withdrawal_name
string <= 100 characters

User given identifier for the withdrawal

end_date
string <date>

Date to conclude the recurring withdrawal. Should be in YYYY-MM-DD format

reference_version
required
number

Responses

Request samples

Content type
application/json
{
  • "amount": "1500.00",
  • "withdrawal_name": "New withdrawals to SIPP",
  • "end_date": "2024-10-30",
  • "reference_version": 1
}

Response samples

Content type
application/json
{
  • "status": "active",
  • "withdrawal_name": "New withdrawals to SIPP",
  • "amount": "1500.00",
  • "value": {
    }
}

Cancel recurring withdrawal

Cancel a recurring withdrawal setup in the system. Recurring withdrawals with the status ‘Active' can be cancelled through this endpoint. Cancelled withdrawals cannot be active again.

Authorizations:
ApiSecretKey
path Parameters
withdrawal_id
required
string

Withdrawal ID

header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "status": "Cancelled",
  • "value": {
    }
}

Utility

The utility endpoint allows the Wealth Manager to upload information required by the system to support the daily operations (e.g. file uploads for daily jobs, calendar updates etc.)

File upload

Copy a file from the Wealth Manager's data store (system must have read permission for this store) to an internal data store

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
required
Array of objects

file path array for the file(s) from external data store.

Responses

Request samples

Content type
application/json
{
  • "file_paths": [
    ]
}

Response samples

Content type
application/json
{
  • "bucket": "wos-dev13-reconciliation-files-us-east-2",
  • "keys": [
    ]
}

Bank Accounts

The Bank Account endpoint allows a wealth manager to create, update and retrieve the bank account details of an investor. An investor can have one or more bank accounts within the system and a default bank account should always be configured.

Every bank account has an account status that represents the active or inactive status of an account. Only active bank accounts can be used for any transactions in the system.

Currently bank accounts can be created for investors and contributing employers. The ownership is reflected in the bank_account_type field.

Create new bank account

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
investor_id
required
string
contributing_party_id
string

This is contributing employer ID for contributing employer bank accounts. Field is required for contributing employer bank accounts.

account_name
required
string <= 100 characters
bank_account_type
required
string
Enum: "investor" "contributing_employer"

This is 'investor' for investor bank accounts and 'contributing_employer' for contributing employer bank accounts.

default_account
required
string
Enum: "yes" "no"

Only one account should be the default

bank_account_number
required
string [ 6 .. 8 ] characters

Unique for the investor

account_status
string
Enum: "active" "inactive"

If not populated, will be defaulted to inactive

sort_code
string [ 6 .. 8 ] characters

Mandatory if region is UK

building_society_roll_number
string [ 1 .. 18 ] characters

Responses

Request samples

Content type
application/json
{
  • "investor_id": "inv-XUT11265",
  • "contributing_party_id": "cem-ZWV37971",
  • "account_name": "David Brown",
  • "bank_account_type": "investor",
  • "default_account": "no",
  • "bank_account_number": "12345678",
  • "account_status": "active",
  • "sort_code": "123456",
  • "building_society_roll_number": "12345672"
}

Response samples

Content type
application/json
{
  • "bank_account_id": "ba-20b904f7-8d05-4efd-bd36-4ec3b1ce8e03",
  • "investor_id": "inv-XUT11265",
  • "account_name": "David Brown",
  • "bank_account_type": "investor",
  • "default_account": "no",
  • "bank_account_number": "****5678",
  • "account_status": "active",
  • "sort_code": "****56",
  • "building_society_roll_number": "******72",
  • "reference_version": 1,
  • "created_at": "2020-07-08T07:36:05.884Z",
  • "updated_at": "2020-07-10T07:36:05.884Z"
}

Retrieve all the bank accounts of a particular investor

Authorizations:
ApiSecretKey
query Parameters
investor_id
required
string

Valid Investor ID

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/bank-accounts/v1?investor_id=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "bankAccounts": [
    ]
}

Retrieve existing bank account from bank account ID

Authorizations:
ApiSecretKey
path Parameters
bank_account_id
required
string

Bank Account ID

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url https://web_host_name/tenant/bank-accounts/v1/%7Bbank_account_id%7D \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "bank_account_id": "ba-20b904f7-8d05-4efd-bd36-4ec3b1ce8e03",
  • "investor_id": "inv-XUT11265",
  • "account_name": "David Brown",
  • "bank_account_type": "investor",
  • "default_account": "no",
  • "bank_account_number": "****5678",
  • "account_status": "active",
  • "sort_code": "****56",
  • "building_society_roll_number": "******72",
  • "reference_version": 1,
  • "created_at": "2020-07-08T07:36:05.884Z",
  • "updated_at": "2020-07-10T07:36:05.884Z"
}

Update existing bank account details

Update an existing Bank Account. The system will update only the fields sent in the request. Field mentioned as Nullable can be deleted by updating those values with null. Sending empty values for fields will not update the fields.

Authorizations:
ApiSecretKey
path Parameters
bank_account_id
required
string

Bank Account ID

header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
account_name
string <= 100 characters
default_account
string
Enum: "yes" "no"

Only one account should be the default

account_status
string
Enum: "active" "inactive"
reference_version
required
integer

Responses

Request samples

Content type
application/json
{
  • "account_name": "David Brown",
  • "default_account": "no",
  • "account_status": "inactive",
  • "reference_version": 2
}

Response samples

Content type
application/json
{
  • "bank_account_id": "ba-20b904f7-8d05-4efd-bd36-4ec3b1ce8e03",
  • "investor_id": "inv-XUT11265",
  • "account_name": "David Brown",
  • "bank_account_type": "investor",
  • "default_account": "no",
  • "bank_account_number": "****5678",
  • "account_status": "active",
  • "sort_code": "****56",
  • "building_society_roll_number": "******72",
  • "reference_version": 1,
  • "created_at": "2020-07-08T07:36:05.884Z",
  • "updated_at": "2020-07-10T07:36:05.884Z"
}

Investor Accounts

An investor account is designed to manage a group of pots attached to a single financial product. A user can maintain multiple accounts for a given financial product if the product regulations support this setup.

Retrieve all the investor accounts Deprecated

Authorizations:
ApiSecretKey
query Parameters
page_size
string

Page size for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_number, both page_size and page_number will be defaulted to 1000 and 1. Max page size is 4000. Results are sorted decending order of the created date & time.

page_number
string

Page number for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_size, both page_size and page_number will be defaulted to 1000 and 1. Results are sorted decending order of the created date & time.

account_id
string

Multiple account IDs as comma seperated string

investor_id
string

Multiple investor IDs as comma seperated string

financial_product_id
string
Enum: "general_investment_product" "lisa_cash" "lisa_stocks" "sipp_accumulation" "sipp_fad" "stocks_isa" "treasury_management"

Multiple financial product IDs as comma seperated string

account_type
string
Enum: "individual" "business"

Type of the account. Can give multiple account types as comma separated values.

account_sub_type
string
Enum: "individual" "power_of_attorney" "court_of_protection" "sipp" "ssas" "trust" "business" "charity" "sole_trader" "partnership"

Sub type of the account. Can give multiple account sub types as comma separated values.

status
string
Enum: "active" "pending_cancellation" "pending_closure" "cancelled" "closed" "matured" "inactive"

Multiple statuses as comma seperated string

isa_account_type
string
Enum: "X" "Z" "B" "G"

ISA financial product specific account type. Can give multiple account types as comma separated values.

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/investor-accounts/v1?page_size=SOME_STRING_VALUE&page_number=SOME_STRING_VALUE&account_id=SOME_STRING_VALUE&investor_id=SOME_STRING_VALUE&financial_product_id=SOME_STRING_VALUE&account_type=SOME_STRING_VALUE&account_sub_type=SOME_STRING_VALUE&status=SOME_STRING_VALUE&isa_account_type=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "investor_accounts": [
    ],
  • "next_page_available": true
}

Create investor account from external account ID Deprecated

This endpoint facilitates the creation of an investor account for a selected financial product, using an external account ID as the unique identifier. Currently this endpoint supports creation of investor accounts for Treasury Management financial product.

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
request_id
required
string <uuid>

Unique request ID to ensure idempotency. (ex: UUID)

account_id
required
string <= 20 characters

Investor account ID

investor_id
required
string
financial_product_id
required
string
Value: "treasury_management"
account_type
string
Enum: "individual" "business"

Type of the account

account_sub_type
string
Enum: "individual" "power_of_attorney" "court_of_protection" "sipp" "ssas" "trust" "business" "charity" "sole_trader" "partnership"

Sub type of the account

  • Enum for Individual account type: individual, power_of_attorney, court_of_protection, sipp, ssas, trust
  • Enum for Business account type: business, charity, sole_trader, partnership
date_of_account_activation
string <date>

The first date the account was opened by the investor. For LISA accounts, this will be set with the date of the initial subscription to the account.

additional_external_details
object

This field is used to capture additional information or flags specific to the investor account, represented as key-value pairs.

Responses

Request samples

Content type
application/json
{
  • "request_id": "266ea41d-adf5-480b-af50-15b940c2b846",
  • "account_id": "CASHACC1674797806000",
  • "investor_id": "inv-XUT11265",
  • "financial_product_id": "treasury_management",
  • "account_type": "individual",
  • "account_sub_type": "power_of_attorney",
  • "date_of_account_activation": "2024-08-27",
  • "additional_external_details": {
    }
}

Response samples

Content type
application/json
{
  • "account_id": "CASHACC1674797806011",
  • "investor_id": "inv-XUT11265",
  • "financial_product_id": "treasury_management",
  • "account_type": "individual",
  • "account_sub_type": "power_of_attorney",
  • "date_of_account_activation": "2024-08-27T00:00:00.000Z",
  • "additional_external_details": {
    },
  • "status": "active",
  • "reference_version": 1,
  • "created_at": "2024-08-28T11:10:49.606Z",
  • "updated_at": "2024-08-28T11:10:49.606Z"
}

Retrieve existing investor account from account ID Deprecated

Authorizations:
ApiSecretKey
path Parameters
account_id
required
string

Unique identifier of the investor account

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url https://web_host_name/tenant/investor-accounts/v1/%7Baccount_id%7D \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "account_id": "SSISA1663750577493",
  • "investor_id": "inv-XUT11265",
  • "financial_product_id": "treasury_management",
  • "account_type": "individual",
  • "account_sub_type": "power_of_attorney",
  • "date_of_account_activation": "2022-09-21T08:56:17.493Z",
  • "status": "active",
  • "pot_id": [
    ],
  • "current_year_subscription": "false",
  • "first_subscription_date_for_current_year": "2019-08-24T14:15:22Z",
  • "current_year_total_contribution": "string",
  • "current_year_total_withdrawals": "string",
  • "current_year_total_isa_contribution": "string",
  • "current_year_total_isa_withdrawals": "string",
  • "current_year_RAS_claimed": "string",
  • "current_year_gross_contribution": "string",
  • "current_year_MPAA_utilized": "string",
  • "current_year_MPAA_remaining": "string",
  • "current_year_RAS_claims_pending": "string",
  • "current_year_LISA_bonus_claimed": "string",
  • "current_year_LISA_bonus_pending": "string",
  • "current_year_withdrawal_charges": "string",
  • "current_year_pending_withdrawals": "string",
  • "total_contribution": "string",
  • "total_gross_contribution": "string",
  • "total_bonus_claimed": "string",
  • "total_withdrawals": "string",
  • "total_withdrawal_charges": "string",
  • "total_market_value": "0",
  • "isa_allowance_remaining": "20000",
  • "lisa_allowance_remaining": "4000",
  • "lsdba_percentage_used": "2.12",
  • "lsa_percentage_used": "string",
  • "custodian_account_reference": "CAR573838383",
  • "custodian_id": "CID594898ff",
  • "custodian_client_reference": "CCR578fh8",
  • "regulator_advisor_id": "RAI48483jd",
  • "life_events": [
    ],
  • "account_ownership": "individual",
  • "reference_version": 1,
  • "created_at": "2022-12-29T10:36:03.064Z",
  • "updated_at": "2022-12-29T10:36:03.064Z",
  • "hmrc_data": {
    },
  • "isa_account_type": "X",
  • "additional_external_details": {
    },
  • "total_gross_pension_withdrawal_life_time": "string",
  • "current_year_total_gross_pension_withdrawal": "string",
  • "total_net_pension_withdrawal_life_time": "string",
  • "current_year_total_net_pension_withdrawal": "string",
  • "current_year_total_tax_paid": "string",
  • "total_tax_paid_life_time": "string",
  • "current_year_total_gross_drawdown_withdrawal": "string",
  • "total_gross_drawdown_withdrawal_life_time": "string",
  • "current_year_total_net_drawdown_withdrawal": "string",
  • "total_net_drawdown_withdrawal_life_time": "string",
  • "current_year_total_tax_paid_from_drawdown": "string",
  • "total_tax_paid_from_drawdown_life_time": "string",
  • "current_year_total_gross_ufpls_withdrawal": "string",
  • "total_gorss_ufpls_withdrawal_life_time": "string",
  • "current_year_total_net_ufpls_withdrawal": "string",
  • "total_net_ufpls_withdrawal_life_time": "string",
  • "current_year_total_tax_paid_from_ufpls": "string",
  • "total_tax_paid_from_ufpls_life_time": "string",
  • "current_year_total_tax_free_cash_paid_from_ufpls": "string",
  • "total_tax_free_cash_paid_from_ufpls_life_time": "string",
  • "current_year_total_gross_taxable_ufpls_withdrawal": "string",
  • "total_gross_taxable_ufpls_withdrawal_life_time": "string",
  • "personal_allowance_utilized": "string",
  • "additional_pay": "string",
  • "tax_overpaid": "string"
}

Update investor account details Deprecated

Update an existing investor account. The system will update only the fields sent in the payload. Field mentioned as Nullable can be deleted by updating those values with null. Custodian details including the custodian_id, custodian_account_reference, custodian_client_ref and regulator_advisor_id can be updated for an account through this endpoint only.

Authorizations:
ApiSecretKey
path Parameters
account_id
required
string

Unique identifier of the investor account

header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
custodian_account_reference
string or null <= 64 characters
custodian_id
string or null <= 64 characters
custodian_client_reference
string or null <= 64 characters
regulator_advisor_id
string or null <= 64 characters
reference_version
required
integer

Responses

Request samples

Content type
application/json
{
  • "custodian_account_reference": "CAR573838383",
  • "custodian_id": "CID594898ff",
  • "custodian_client_reference": "CCR578fh8",
  • "regulator_advisor_id": "RAI48483jd",
  • "reference_version": 1
}

Response samples

Content type
application/json
{
  • "account_id": "SSISA1663750577493",
  • "investor_id": "inv-XUT11265",
  • "financial_product_id": "treasury_management",
  • "account_type": "individual",
  • "account_sub_type": "power_of_attorney",
  • "date_of_account_activation": "2022-09-21T08:56:17.493Z",
  • "status": "active",
  • "pot_id": [
    ],
  • "current_year_subscription": "false",
  • "first_subscription_date_for_current_year": "2019-08-24T14:15:22Z",
  • "current_year_total_contribution": "string",
  • "current_year_total_withdrawals": "string",
  • "current_year_total_isa_contribution": "string",
  • "current_year_total_isa_withdrawals": "string",
  • "current_year_RAS_claimed": "string",
  • "current_year_gross_contribution": "string",
  • "current_year_MPAA_utilized": "string",
  • "current_year_MPAA_remaining": "string",
  • "current_year_RAS_claims_pending": "string",
  • "current_year_LISA_bonus_claimed": "string",
  • "current_year_LISA_bonus_pending": "string",
  • "current_year_withdrawal_charges": "string",
  • "current_year_pending_withdrawals": "string",
  • "total_contribution": "string",
  • "total_gross_contribution": "string",
  • "total_bonus_claimed": "string",
  • "total_withdrawals": "string",
  • "total_withdrawal_charges": "string",
  • "total_market_value": "0",
  • "isa_allowance_remaining": "20000",
  • "lisa_allowance_remaining": "4000",
  • "lsdba_percentage_used": "2.12",
  • "lsa_percentage_used": "string",
  • "custodian_account_reference": "CAR573838383",
  • "custodian_id": "CID594898ff",
  • "custodian_client_reference": "CCR578fh8",
  • "regulator_advisor_id": "RAI48483jd",
  • "life_events": [
    ],
  • "account_ownership": "individual",
  • "reference_version": 1,
  • "created_at": "2022-12-29T10:36:03.064Z",
  • "updated_at": "2022-12-29T10:36:03.064Z",
  • "hmrc_data": {
    },
  • "isa_account_type": "X",
  • "additional_external_details": {
    },
  • "total_gross_pension_withdrawal_life_time": "string",
  • "current_year_total_gross_pension_withdrawal": "string",
  • "total_net_pension_withdrawal_life_time": "string",
  • "current_year_total_net_pension_withdrawal": "string",
  • "current_year_total_tax_paid": "string",
  • "total_tax_paid_life_time": "string",
  • "current_year_total_gross_drawdown_withdrawal": "string",
  • "total_gross_drawdown_withdrawal_life_time": "string",
  • "current_year_total_net_drawdown_withdrawal": "string",
  • "total_net_drawdown_withdrawal_life_time": "string",
  • "current_year_total_tax_paid_from_drawdown": "string",
  • "total_tax_paid_from_drawdown_life_time": "string",
  • "current_year_total_gross_ufpls_withdrawal": "string",
  • "total_gorss_ufpls_withdrawal_life_time": "string",
  • "current_year_total_net_ufpls_withdrawal": "string",
  • "total_net_ufpls_withdrawal_life_time": "string",
  • "current_year_total_tax_paid_from_ufpls": "string",
  • "total_tax_paid_from_ufpls_life_time": "string",
  • "current_year_total_tax_free_cash_paid_from_ufpls": "string",
  • "total_tax_free_cash_paid_from_ufpls_life_time": "string",
  • "current_year_total_gross_taxable_ufpls_withdrawal": "string",
  • "total_gross_taxable_ufpls_withdrawal_life_time": "string",
  • "personal_allowance_utilized": "string",
  • "additional_pay": "string",
  • "tax_overpaid": "string"
}

Retrieve all the investor accounts V2

Authorizations:
ApiSecretKey
query Parameters
page_size
string

Page size for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_number, both page_size and page_number will be defaulted to 1000 and 1. Max page size is 4000. Results are sorted decending order of the created date & time.

page_number
string

Page number for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_size, both page_size and page_number will be defaulted to 1000 and 1. Results are sorted decending order of the created date & time.

account_id
string

Multiple account IDs as comma seperated string

investor_id
string

Multiple investor IDs as comma seperated string

financial_product_id
string
Enum: "general_investment_product" "lisa_cash" "lisa_stocks" "sipp_accumulation" "sipp_fad" "stocks_isa" "treasury_management" "stocks_jisa"

Multiple financial product IDs as comma seperated string

account_type
string
Enum: "individual" "business"

Type of the account. Can give multiple account types as comma separated values.

account_sub_type
string
Enum: "individual" "power_of_attorney" "court_of_protection" "sipp" "ssas" "trust" "business" "charity" "sole_trader" "partnership"

Sub type of the account. Can give multiple account sub types as comma separated values.

status
string
Enum: "active" "pending_cancellation" "pending_closure" "cancelled" "closed" "matured" "inactive"

Multiple statuses as comma seperated string

isa_account_type
string
Enum: "X" "Z" "B" "G"

ISA financial product specific account type. Can give multiple account types as comma separated values.

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/investor-accounts/v2?page_size=SOME_STRING_VALUE&page_number=SOME_STRING_VALUE&account_id=SOME_STRING_VALUE&investor_id=SOME_STRING_VALUE&financial_product_id=SOME_STRING_VALUE&account_type=SOME_STRING_VALUE&account_sub_type=SOME_STRING_VALUE&status=SOME_STRING_VALUE&isa_account_type=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "investor_accounts": [
    ],
  • "next_page_available": true
}

Create investor account V2

This endpoint facilitates the creation of an investor account for a selected financial product. Currently, this endpoint supports the creation of investor accounts for Treasury Management and Stocks JISA financial products.

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
request_id
required
string <uuid>

Unique request ID to ensure idempotency. (ex: UUID)

account_id
string <= 20 characters

Investor account ID. In the absence of an Account ID in the request , one will be generated automatically.

investor_id
required
Array of strings

If multiple investors are linked to the account, include their corresponding Investor IDs in the investor_id array. Note that the addition of multiple investors is only allowed when the financial_product_id is treasury_management. For financial_product_id stocks_jisa, only one investor ID can be included.

financial_product_id
required
string
Enum: "treasury_management" "stocks_jisa"
account_type
string
Enum: "individual" "business"

Type of the account.

  • Allowed values: individual, business
  • If financial_product_id is stocks_jisa, the account_type must be individual.
account_sub_type
string or null
Enum: "individual" "power_of_attorney" "court_of_protection" "sipp" "ssas" "trust" "business" "charity" "sole_trader" "partnership"

Sub type of the account

  • Enum for Individual account type: individual, power_of_attorney, court_of_protection, sipp, ssas, trust
  • Enum for Business account type: business, charity, sole_trader, partnership
  • If financial_product_id is stocks_jisa, the account_sub_type shouldn't be provided.
date_of_account_activation
string <date>

The date the account was opened by the investor. date_of_account_activation should be provided only if an external account_id is provided in the request.

additional_external_details
object

This field is used to capture additional information or flags specific to the investor account, represented as key-value pairs.

object

Individual and organisation related parties of an account.

Responses

Request samples

Content type
application/json
{
  • "request_id": "266ea41d-adf5-480b-af50-15b940c2b846",
  • "account_id": "CASHACC1674797806011",
  • "investor_id": [
    ],
  • "financial_product_id": "treasury_management",
  • "account_type": "individual",
  • "account_sub_type": "power_of_attorney",
  • "date_of_account_activation": "2024-08-27",
  • "additional_external_details": {
    },
  • "related_parties": {
    }
}

Response samples

Content type
application/json
{
  • "account_id": "CASHACC1674797806011",
  • "investor_id": [
    ],
  • "financial_product_id": "treasury_management",
  • "account_type": "individual",
  • "account_sub_type": "power_of_attorney",
  • "date_of_account_activation": "2024-08-27T00:00:00.000Z",
  • "additional_external_details": {
    },
  • "status": "active",
  • "related_parties": {
    },
  • "reference_version": 1,
  • "created_at": "2024-08-28T11:10:49.606Z",
  • "updated_at": "2024-08-28T11:10:49.606Z"
}

Retrieve existing investor account from account ID V2

Authorizations:
ApiSecretKey
path Parameters
account_id
required
string

Unique identifier of the investor account

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url https://web_host_name/tenant/investor-accounts/v2/%7Baccount_id%7D \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "account_id": "SSISA1663750577493",
  • "investor_id": [
    ],
  • "financial_product_id": "stocks_isa",
  • "account_type": "individual",
  • "account_sub_type": "power_of_attorney",
  • "jisa": {
    },
  • "date_of_account_activation": "2022-09-21T08:56:17.493Z",
  • "tax_year": "2025",
  • "status": "active",
  • "pot_id": [
    ],
  • "current_year_subscription": "false",
  • "first_subscription_date_for_current_year": "2019-08-24T14:15:22Z",
  • "current_year_total_contribution": "string",
  • "current_year_total_withdrawals": "string",
  • "current_year_total_isa_contribution": "string",
  • "current_year_total_isa_withdrawals": "string",
  • "current_year_total_jisa_contribution": "string",
  • "current_year_RAS_claimed": "string",
  • "current_year_gross_contribution": "string",
  • "current_year_MPAA_utilized": "string",
  • "current_year_MPAA_remaining": "string",
  • "current_year_RAS_claims_pending": "string",
  • "current_year_LISA_bonus_claimed": "string",
  • "current_year_LISA_bonus_pending": "string",
  • "current_year_withdrawal_charges": "string",
  • "current_year_pending_withdrawals": "string",
  • "total_contribution": "string",
  • "total_gross_contribution": "string",
  • "total_bonus_claimed": "string",
  • "total_withdrawals": "string",
  • "total_withdrawal_charges": "string",
  • "total_market_value": "0",
  • "isa_allowance_remaining": "20000",
  • "jisa_allowance_remaining": "8000",
  • "lisa_allowance_remaining": "4000",
  • "lsdba_percentage_used": "2.12",
  • "lsa_percentage_used": "1.12",
  • "lsdba_utilised": "12321.23",
  • "lsa_utilised": "12312.11",
  • "custodian_account_reference": "CAR573838383",
  • "custodian_id": "CID594898ff",
  • "custodian_client_reference": "CCR578fh8",
  • "regulator_advisor_id": "RAI48483jd",
  • "life_events": [
    ],
  • "account_ownership": "individual",
  • "reference_version": 1,
  • "created_at": "2022-12-29T10:36:03.064Z",
  • "updated_at": "2022-12-29T10:36:03.064Z",
  • "hmrc_data": {
    },
  • "isa_account_type": "X",
  • "additional_external_details": {
    },
  • "related_parties": {
    },
  • "total_gross_pension_withdrawal_life_time": "string",
  • "current_year_total_gross_pension_withdrawal": "string",
  • "total_net_pension_withdrawal_life_time": "string",
  • "current_year_total_net_pension_withdrawal": "string",
  • "current_year_total_tax_paid": "string",
  • "total_tax_paid_life_time": "string",
  • "current_year_total_gross_drawdown_withdrawal": "string",
  • "total_gross_drawdown_withdrawal_life_time": "string",
  • "current_year_total_net_drawdown_withdrawal": "string",
  • "total_net_drawdown_withdrawal_life_time": "string",
  • "current_year_total_tax_paid_from_drawdown": "string",
  • "total_tax_paid_from_drawdown_life_time": "string",
  • "current_year_total_gross_ufpls_withdrawal": "string",
  • "total_gorss_ufpls_withdrawal_life_time": "string",
  • "current_year_total_net_ufpls_withdrawal": "string",
  • "total_net_ufpls_withdrawal_life_time": "string",
  • "current_year_total_tax_paid_from_ufpls": "string",
  • "total_tax_paid_from_ufpls_life_time": "string",
  • "current_year_total_tax_free_cash_paid_from_ufpls": "string",
  • "total_tax_free_cash_paid_from_ufpls_life_time": "string",
  • "current_year_total_gross_taxable_ufpls_withdrawal": "string",
  • "total_gross_taxable_ufpls_withdrawal_life_time": "string",
  • "personal_allowance_utilized": "string",
  • "additional_pay": "string",
  • "tax_overpaid": "string",
  • "past_gross_contributions": {
    }
}

Update investor account details V2

Update an existing investor account. The system will update only the fields sent in the payload. Field mentioned as Nullable can be deleted by updating those values with null. Custodian details including the custodian_id, custodian_account_reference, custodian_client_ref and regulator_advisor_id can be updated for an account through this endpoint only. Updating related_parties is allowed via this endpoint only for Treasury Management investor accounts.

Authorizations:
ApiSecretKey
path Parameters
account_id
required
string

Unique identifier of the investor account

header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
custodian_account_reference
string or null <= 64 characters
custodian_id
string or null <= 64 characters
custodian_client_reference
string or null <= 64 characters
regulator_advisor_id
string or null <= 64 characters
object

Individual and organisation related parties of an account for update request.

status
string
Enum: "active" "inactive"

Only allowed if financial_product_type is stocks_isa

reference_version
required
integer

Responses

Request samples

Content type
application/json
{
  • "custodian_account_reference": "CAR573838383",
  • "custodian_id": "CID594898ff",
  • "custodian_client_reference": "CCR578fh8",
  • "regulator_advisor_id": "RAI48483jd",
  • "related_parties": {
    },
  • "status": "active",
  • "reference_version": 1
}

Response samples

Content type
application/json
{
  • "account_id": "SSISA1663750577493",
  • "investor_id": [
    ],
  • "financial_product_id": "stocks_isa",
  • "account_type": "individual",
  • "account_sub_type": "power_of_attorney",
  • "jisa": {
    },
  • "date_of_account_activation": "2022-09-21T08:56:17.493Z",
  • "tax_year": "2025",
  • "status": "active",
  • "pot_id": [
    ],
  • "current_year_subscription": "false",
  • "first_subscription_date_for_current_year": "2019-08-24T14:15:22Z",
  • "current_year_total_contribution": "string",
  • "current_year_total_withdrawals": "string",
  • "current_year_total_isa_contribution": "string",
  • "current_year_total_isa_withdrawals": "string",
  • "current_year_total_jisa_contribution": "string",
  • "current_year_RAS_claimed": "string",
  • "current_year_gross_contribution": "string",
  • "current_year_MPAA_utilized": "string",
  • "current_year_MPAA_remaining": "string",
  • "current_year_RAS_claims_pending": "string",
  • "current_year_LISA_bonus_claimed": "string",
  • "current_year_LISA_bonus_pending": "string",
  • "current_year_withdrawal_charges": "string",
  • "current_year_pending_withdrawals": "string",
  • "total_contribution": "string",
  • "total_gross_contribution": "string",
  • "total_bonus_claimed": "string",
  • "total_withdrawals": "string",
  • "total_withdrawal_charges": "string",
  • "total_market_value": "0",
  • "isa_allowance_remaining": "20000",
  • "jisa_allowance_remaining": "8000",
  • "lisa_allowance_remaining": "4000",
  • "lsdba_percentage_used": "2.12",
  • "lsa_percentage_used": "1.12",
  • "lsdba_utilised": "12321.23",
  • "lsa_utilised": "12312.11",
  • "custodian_account_reference": "CAR573838383",
  • "custodian_id": "CID594898ff",
  • "custodian_client_reference": "CCR578fh8",
  • "regulator_advisor_id": "RAI48483jd",
  • "life_events": [
    ],
  • "account_ownership": "individual",
  • "reference_version": 1,
  • "created_at": "2022-12-29T10:36:03.064Z",
  • "updated_at": "2022-12-29T10:36:03.064Z",
  • "hmrc_data": {
    },
  • "isa_account_type": "X",
  • "additional_external_details": {
    },
  • "related_parties": {
    },
  • "total_gross_pension_withdrawal_life_time": "string",
  • "current_year_total_gross_pension_withdrawal": "string",
  • "total_net_pension_withdrawal_life_time": "string",
  • "current_year_total_net_pension_withdrawal": "string",
  • "current_year_total_tax_paid": "string",
  • "total_tax_paid_life_time": "string",
  • "current_year_total_gross_drawdown_withdrawal": "string",
  • "total_gross_drawdown_withdrawal_life_time": "string",
  • "current_year_total_net_drawdown_withdrawal": "string",
  • "total_net_drawdown_withdrawal_life_time": "string",
  • "current_year_total_tax_paid_from_drawdown": "string",
  • "total_tax_paid_from_drawdown_life_time": "string",
  • "current_year_total_gross_ufpls_withdrawal": "string",
  • "total_gorss_ufpls_withdrawal_life_time": "string",
  • "current_year_total_net_ufpls_withdrawal": "string",
  • "total_net_ufpls_withdrawal_life_time": "string",
  • "current_year_total_tax_paid_from_ufpls": "string",
  • "total_tax_paid_from_ufpls_life_time": "string",
  • "current_year_total_tax_free_cash_paid_from_ufpls": "string",
  • "total_tax_free_cash_paid_from_ufpls_life_time": "string",
  • "current_year_total_gross_taxable_ufpls_withdrawal": "string",
  • "total_gross_taxable_ufpls_withdrawal_life_time": "string",
  • "personal_allowance_utilized": "string",
  • "additional_pay": "string",
  • "tax_overpaid": "string",
  • "past_gross_contributions": {
    }
}

Projections

The projection endpoint provides a projection of pension accounts.

For SIPP Accumulation accounts, projection is provided for the end of the 1st, 3rd, and 5th years and the retirement year by default.
For monthly drawdown, projection is provided for end of the 5th and 10th years and the year when investor’s age where the pension fund goes to zero by default. If it is not going to zero before investor ages 100 years, response will be The pension will last beyond the 100th year

Projection accumulation (BETA)

This feature is currently in BETA mode

This endpoint supports to project accumulation of a pension account.

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
name
required
string <= 100 characters

Name of the investor

date_of_birth
required
string <date>

Should be today or an earlier date

intended_retirement_age
required
integer

At most should be 100. Should be greater than current age

current_pension_value
required
number

Current value of the pension pot. Can contain up to 2 decimal points

growth_rate
required
number

Annual growth rate of the pot. Can contain up to 2 decimal points

Array of objects
one_off_payment
number

One-off payments are added to the initial value as tax relievable. Can contain up to 2 decimal points

transfer_in
number

Transfer-ins are added to the initial value as tax relievable. Can contain up to 2 decimal points

Array of objects
projection_coverage_years
Array of arrays

Projection is given for the requested coverage years and the retirement year. If not given, projection is given for 1st, 3rd, 5th and retirement year. Can contains positive integers less than 100

Responses

Request samples

Content type
application/json
{
  • "name": "David Brown",
  • "date_of_birth": "1963-07-19",
  • "intended_retirement_age": 60,
  • "current_pension_value": 1000,
  • "growth_rate": 2.5,
  • "recurring_contributions": [
    ],
  • "one_off_payment": 500,
  • "transfer_in": 500,
  • "fees": [
    ],
  • "projection_coverage_years": [
    ]
}

Response samples

Content type
application/json
{
  • "name": "David Brown",
  • "date_of_birth": "1963-07-19",
  • "intended_retirement_age": 60,
  • "current_pension_value": 1000,
  • "growth_rate": 2.5,
  • "recurring_contributions": [
    ],
  • "one_off_payment": 500,
  • "transfer_in": 500,
  • "fees": [
    ],
  • "projection_coverage_years": [
    ],
  • "pension_projections": [
    ],
  • "inflation_rate": 2
}

Projection drawdown (BETA)

This feature is currently in BETA mode

This endpoint supports to project drawdown of a pension account.

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
name
required
string <= 100 characters

Name of the investor

date_of_birth
required
string <date>

Should be today or an earlier date

current_pension_value
required
number

Current value of the pension pot. Can contain up to 2 decimal points

growth_rate
required
number

Annual growth rate of the pot. Can contain up to 2 decimal points

Array of objects
one_off_payment
number

One-off payments are added to the initial value as tax relievable. Can contain up to 2 decimal points

transfer_in
number

Transfer-ins are added to the initial value as tax relievable. Can contain up to 2 decimal points

Array of objects
one_off_withdrawal
number

One-off withdrawals are deducted from the initial value. Can contain up to 2 decimal points

Array of objects
projection_coverage_years
Array of arrays

Projection is given for the requested coverage years. If not given, projection is given for 5th and 10th years. Can contain positive integers less than 100

Responses

Request samples

Content type
application/json
{
  • "name": "David Brown",
  • "date_of_birth": "1963-07-19",
  • "current_pension_value": 1000,
  • "growth_rate": 2.5,
  • "recurring_contributions": [
    ],
  • "one_off_payment": 500,
  • "transfer_in": 500,
  • "fees": [
    ],
  • "one_off_withdrawal": 500,
  • "recurring_withdrawals": [
    ],
  • "projection_coverage_years": [
    ]
}

Response samples

Content type
application/json
{
  • "name": "David Brown",
  • "date_of_birth": "1963-07-19",
  • "current_pension_value": 1000,
  • "growth_rate": 2.5,
  • "recurring_contributions": [
    ],
  • "one_off_payment": 500,
  • "transfer_in": 500,
  • "fees": [
    ],
  • "one_off_withdrawal": 500,
  • "recurring_withdrawals": [
    ],
  • "projection_coverage_years": [
    ],
  • "age_pension_runout": 60,
  • "pension_projections": [
    ],
  • "inflation_rate": 2
}

SIPP Crystallisation

The crystallisation endpoints allow a tenant to manage their drawdowns.

Get all crystallisation requests

Returns a paged array of crystallisation requests.

Authorizations:
ApiSecretKey
query Parameters
crystallisation_id
string

Crystallisation ID

investor_id
string

Investor ID

status
string
Enum: "Accepted" "Partially completed" "Completed" "Rejected" "Failed"

Status of crystallisation request

page_size
string

Page size for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_number, both page_size and page_number will be defaulted to 1000 and 1. Max page size is 8000. Results are sorted decending order of the created date & time.

page_number
string

Page number for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_size, both page_size and page_number will be defaulted to 1000 and 1. Results are sorted decending order of the created date & time.

sort
string
Default: "desc"
Enum: "asc" "desc"

Sorting order; results are sorted by creation time.

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/pots/v1/crystallisation?crystallisation_id=SOME_STRING_VALUE&investor_id=SOME_STRING_VALUE&status=SOME_STRING_VALUE&page_size=SOME_STRING_VALUE&page_number=SOME_STRING_VALUE&sort=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "crystallisations": [
    ],
  • "next_page_available": true
}

Create a crystallisation request

Returns a response of crystallisation request.

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
request_id
required
string <uuid>

Unique request ID to ensure idempotency. (ex: UUID)

investor_id
required
string

Investor ID of the investor making the crystallisation

bank_account_id
required
string

Bank account ID of Investor

required
Array of objects

Crystallisation instructions

required
Array of objects

Drawdown instructions

Responses

Request samples

Content type
application/json
{
  • "request_id": "266ea41d-adf5-480b-af50-15b940c2b846",
  • "investor_id": "inv-XUT11200",
  • "bank_account_id": "ba-bc00c28f-b3fc-42b7",
  • "crystallisation_instructions": [
    ],
  • "drawdown_instructions": [
    ]
}

Response samples

Content type
application/json
{
  • "crystallisation_id": "SIPPCR-AB24DE7",
  • "investor_id": "inv-XUT11200",
  • "bank_account_id": "ba-bc00c28f-b3fc-42b7",
  • "crystallisation_instructions": [
    ],
  • "drawdown_instructions": [
    ],
  • "status": [
    ]
}

LISA Transactions

The "LISA Transactions" section is tailored exclusively for the financial product Lifetime ISA (LISA). It includes a specialized set of endpoints designed to handle transactions related to LISA accounts' unique features and requirements.

Update existing LISA withdrawal transaction

Update withdrawal payment date of a scheduled LISA withdrawal transaction. The system will update only the fields sent in the request. Field mentioned as Nullable can be deleted by updating those values with null. Sending empty values for fields will not update the fields.

Authorizations:
ApiSecretKey
path Parameters
transaction_id
required
string

Transaction ID of the withdrawal transaction that needs to be updated

header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
request_id
required
string <uuid>

The system generated unique request ID

reference_verison
required
integer

Reference version of the transaction

trade_date
required
string

Trade Date of the withdrawal

Responses

Request samples

Content type
application/json
{
  • "request_id": "20b904f7-8d05-4efd-bd36-4ec3b1ce8e03",
  • "reference_verison": 1,
  • "trade_date": "2020-09-01"
}

Response samples

Content type
application/json
{
  • "transaction_id": "0fec1e58-b197-4052-99cf-2218496c5482",
  • "investment_product_id": "string",
  • "transaction_value": "string",
  • "pot_id": "pot-SDQ5659730",
  • "primary_transaction_type": "Withdrawal",
  • "sub_transaction_type": "Withdrawal",
  • "type": "pending",
  • "sub_type": "scheduled",
  • "currency": "string",
  • "direction": "in",
  • "external_transaction_reference": "string",
  • "created_at": "string",
  • "updated_at": "string",
  • "trade_date": "string",
  • "settlement_date": "string",
  • "origin": "api",
  • "withdrawal_charge_applicable": true,
  • "withdrawal_charge": "string"
}

Workplace Employers

Workplace employers are an entity where organizations can create workplace employers and manage them.

This API endpoint allows you to create, update, and retrieve workplace employers. Additionally, it provides the capability to view the employees (investors) attached to a particular workplace employer.

Create workplace employer

This endpoint will create a workplace contributing employer in the system.

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
name
required
string <= 100 characters

Name of the workplace employer

registration_number
required
string

Registration number of the workplace employer, this should be unique for employers.

required
object

Registered address of the workplace employer

required
object

Address of designated location for receiving official communications

company_structure
string
Value: "LLC"

Structure of the company.

object

Contact details of an individual of the company.

kyb_aml_status
string
Default: "not_started"
Enum: "submitted" "kyb_failed_error" "pending" "clear" "not_started"

Know Your Business status of the company

status
required
string
Enum: "active" "inactive"

Status of the workplace employer. Only the employers with the kyb_aml_status as clear can be set to active.

Responses

Request samples

Content type
application/json
{
  • "name": "Romayo Ltd",
  • "registration_number": "1234567",
  • "registered_address": {
    },
  • "correspondence_address": {
    },
  • "company_structure": "LLC",
  • "contact_details": {
    },
  • "kyb_aml_status": "clear",
  • "status": "active"
}

Response samples

Content type
application/json
{
  • "name": "Romayo Ltd",
  • "registration_number": "1234567",
  • "registered_address": {
    },
  • "correspondence_address": {
    },
  • "company_structure": "LLC",
  • "contact_details": {
    },
  • "kyb_aml_status": "clear",
  • "status": "active",
  • "workplace_employer_id": "wem-AHY58878",
  • "reference_version": 1,
  • "created_at": "2023-07-08T07:36:05.884Z",
  • "updated_at": "2023-07-10T07:36:05.884Z"
}

Get all workplace employers

This endpoint will retrieve all workplace contributing employers in the system.

Authorizations:
ApiSecretKey
query Parameters
page_size
string

Page size for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_number, both page_size and page_number will be defaulted to 1000 and 1. Max page size is 8000.

page_number
string

Page number for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_size, both page_size and page_number will be defaulted to 1000 and 1.

sort
string
Default: "desc"
Enum: "asc" "desc"

Sorting order; results are sorted by creation time.

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/workplace-employers/v1?page_size=SOME_STRING_VALUE&page_number=SOME_STRING_VALUE&sort=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "workplace_employers": [
    ],
  • "next_page_available": true
}

Get existing workplace employer

This endpoint will retrieve details of a particular workplace employer in the system.

Authorizations:
ApiSecretKey
path Parameters
workplace_employer_id
required
string

Workplace Employer ID

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url https://web_host_name/tenant/workplace-employers/v1/%7Bworkplace_employer_id%7D \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "name": "Romayo Ltd",
  • "registration_number": "1234567",
  • "registered_address": {
    },
  • "correspondence_address": {
    },
  • "company_structure": "LLC",
  • "contact_details": {
    },
  • "kyb_aml_status": "clear",
  • "status": "active",
  • "workplace_employer_id": "wem-AHY58878",
  • "reference_version": 1,
  • "created_at": "2023-07-08T07:36:05.884Z",
  • "updated_at": "2023-07-10T07:36:05.884Z"
}

Update workplace employer

This endpoint will update certain fields of a workplace employer in the system.

Authorizations:
ApiSecretKey
path Parameters
workplace_employer_id
required
string

Workplace Employer ID

header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
name
string <= 100 characters

Name of the workplace employer

registration_number
string

Registration number of the workplace employer, this should be unique for employers.

object

Registered address of the workplace employer

object

Address of designated location for receiving official communications

company_structure
string
Value: "LLC"

Structure of the company.

object

Contact details of an individual of the company.

kyb_aml_status
string
Default: "not_started"
Enum: "submitted" "kyb_failed_error" "pending" "clear" "not_started"

Know Your Business status of the company

status
string
Enum: "active" "inactive"

Status of the workplace employer. Only the employers with the kyb_aml_status as clear can be set to active.

reference_version
required
number

Responses

Request samples

Content type
application/json
{
  • "name": "Romayo Ltd",
  • "registration_number": "1234567",
  • "registered_address": {
    },
  • "correspondence_address": {
    },
  • "company_structure": "LLC",
  • "contact_details": {
    },
  • "kyb_aml_status": "clear",
  • "status": "active",
  • "reference_version": 1
}

Response samples

Content type
application/json
{
  • "name": "Romayo Ltd",
  • "registration_number": "1234567",
  • "registered_address": {
    },
  • "correspondence_address": {
    },
  • "company_structure": "LLC",
  • "contact_details": {
    },
  • "kyb_aml_status": "clear",
  • "status": "active",
  • "workplace_employer_id": "wem-AHY58878",
  • "reference_version": 1,
  • "created_at": "2023-07-08T07:36:05.884Z",
  • "updated_at": "2023-07-10T07:36:05.884Z"
}

Get all investors of a workplace employer

This endpoint will provide investor details attached to a certain workplace employer.

Authorizations:
ApiSecretKey
path Parameters
workplace_employer_id
required
string

Workplace Employer ID

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url https://web_host_name/tenant/workplace-employers/v1/%7Bworkplace_employer_id%7D/investors \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "workplace_employer_id": "wem-AHY58878",
  • "investors": [
    ]
}

Cash Investments

The "Cash Investments" include a collection of endpoints that facilitate instructions for cash investment products.

Create cash deposit

The endpoint facilitates the creation of buy instruction for a cash investment product. The endpoint ensures that necessary validation checks are performed to verify account eligibility, and adherence to investment thresholds

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
request_id
required
string

Unique request id to ensure idempotency. (ex: UUID)

required
object

Responses

Request samples

Content type
application/json
{
  • "request_id": "54523457845sdferhefGhiy9ur4",
  • "investment_instructions": {
    }
}

Response samples

Content type
application/json
{
  • "aggregated_transaction_id": "c106b5e7-aac5-4466-9698-fe4ea792a63r",
  • "transaction_id": "c106b5e7-aac5-4466-9698-fe4ea792a67e",
  • "investment_product_id": "CASHINV-EUQ86362",
  • "pot_id": "pot-NAH5143230",
  • "counterparty_id": "CPY-AHY58878",
  • "primary_transaction_type": "Buy",
  • "sub_transaction_type": "Cash deposit buy",
  • "transaction_value": "110",
  • "type": "pending",
  • "sub_type": "scheduled",
  • "currency": "GBP",
  • "direction": "in",
  • "origin": "api",
  • "is_a_topup": false,
  • "created_at": "2024-10-20T14:49:59.878Z",
  • "updated_at": "2024-10-20T14:49:59.878Z"
}

Create cash deposit redemption

This end point facilitates redemption requests for investments placed in cash deposit products.

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
request_id
required
string

Unique request id to ensure idempotency. (ex: UUID)

pot_id
required
string

System generated ID of pot

investment_product_id
required
string

System generated investment product ID

deposit_reference
required
string

System generated reference of the deposit

redemption_type
required
string
Enum: "partial" "full"

Indicates if the redemption is partial or full (closure)

currency
required
string
Value: "GBP"

Currency of the deposit

transaction_value
string

Amount being redeemed. Must be in correct pattern (upto 2 decimal places, eg: 25, 332.3, 1050.25). Required for partial redemptions. Should be excluded for full redemptions.

Responses

Request samples

Content type
application/json
{
  • "request_id": "54523457845sdferhefGhiy9ur4",
  • "pot_id": "pot-NAH5143230",
  • "investment_product_id": "CASHINV-EUQ86362",
  • "deposit_reference": "REDEMP-EUQ86362",
  • "redemption_type": "partial",
  • "currency": "GBP",
  • "transaction_value": "1000.00"
}

Response samples

Content type
application/json
{
  • "transaction_id": "c106b5e7-aac5-4466-9698-fe4ea792a63r",
  • "aggregated_transaction_id": "e2af9f53-1cfc-4081-aab5-09250bd7d059",
  • "pot_id": "pot-NAH5143230",
  • "investment_product_id": "CASHINV-EUQ86362",
  • "deposit_reference": "REDEMP-EUQ86362",
  • "redemption_type": "partial",
  • "currency": "GBP",
  • "transaction_value": "1000.00",
  • "primary_transaction_type": "Sell",
  • "sub_transaction_type": "Cash deposit - full redemption",
  • "type": "pending",
  • "sub_type": "pending",
  • "created_at": "2024-10-20T14:49:59.878Z",
  • "updated_at": "2024-10-20T14:49:59.878Z"
}

Update cash investment transaction status

This endpoint enables status updates for cash investment transactions (cash deposits buys, and redemptions). Status updates are only permitted for transactions in intermediate states and the transactions in terminal statuses can not be modified.

Authorizations:
ApiSecretKey
path Parameters
transaction_id
required
string

Unique identifier for the transaction.

header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
status
required
string
Value: "cancelled"

The next desired state of the transaction.

reason
string <= 200 characters

Reason to update the transaction status.

Responses

Request samples

Content type
application/json
{
  • "status": "cancelled",
  • "reason": "Unexpected delay"
}

Response samples

Content type
application/json
{
  • "aggregated_transaction_id": "c106b5e7-aac5-4466-9698-fe4ea792a63r",
  • "transaction_id": "c106b5e7-aac5-4466-9698-fe4ea792a67e",
  • "investment_product_id": "CASHINV-EUQ86362",
  • "pot_id": "pot-NAH5143230",
  • "counterparty_id": "CPY-AHY58878",
  • "primary_transaction_type": "Buy",
  • "sub_transaction_type": "Cash deposit buy",
  • "transaction_value": "2000.00",
  • "type": "archived",
  • "sub_type": "cancelled",
  • "currency": "GBP",
  • "direction": "in",
  • "origin": "api",
  • "is_a_topup": false,
  • "created_at": "2024-10-20T14:49:59.878Z",
  • "updated_at": "2024-10-20T14:49:59.878Z"
}

Counterparties

This feature is currently in BETA mode

This API endpoint allows you to to retrieve counterparties.

Get all counterparties (BETA)

This endpoint will retrieve all counterparties in the system.

Authorizations:
ApiSecretKey
query Parameters
page_size
string

Page size for the query. This end-point has pagination capabilities. This value should be a positive integer value. If this is not provided or provided without page_number, both page_size and page_number will be defaulted to 1000 and 1. Max page size is 8000.

page_number
string

Page number for the query. This end-point has pagination capabilities. This value should be a positive integer value. If this is not provided or provided without page_size, both page_size and page_number will be defaulted to 1000 and 1.

sort
string
Default: "desc"
Enum: "asc" "desc"

Sorting order; results are sorted by creation time.

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/counterparties/v1?page_size=SOME_STRING_VALUE&page_number=SOME_STRING_VALUE&sort=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "counterparties": [
    ],
  • "next_page_available": true
}

Get existing counterparty (BETA)

This endpoint will retrieve details of a particular counterparty in the system.

Authorizations:
ApiSecretKey
path Parameters
counterparty_id
required
string

Counterparty ID

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url https://web_host_name/tenant/counterparties/v1/%7Bcounterparty_id%7D \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "counterparty_id": "CPY-AHY58878",
  • "counterparty_name": "HSBC",
  • "counterparty_type": "bank",
  • "instruction_schedule": {
    },
  • "sell_instruction_schedule": {
    },
  • "bank_accounts": [
    ],
  • "status": "active",
  • "attachments": [
    ],
  • "reference_version": 1,
  • "created_at": "2020-07-08T07:36:05.884Z",
  • "updated_at": "2020-07-10T07:36:05.884Z"
}

Transfers

This feature is currently in BETA mode

This API endpoint allows you to create transfers and and retrieve the history of a transfer.

Transfer solution provider allowed currently is origo

Create transfer in

Create a new transfer In.

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
request_id
required
string <uuid>

Unique request ID to ensure idempotency. (ex: UUID)

service_provider
required
string
Enum: "origo" "wealthos"

The transfer service provider facilitating the transfer.

transfer_type
required
string
Enum: "cash" "in_specie"

Defines whether the transfer is cash or in-specie. Only 'cash' is allowed currently.

encash_all
required
boolean

Instruction to denote whether all pre-retirement benefits should be included in the settlement during the transfer process. This can be true only when transfer_type=cash.

acquiring_account_id
required
string

The investor account ID where the transfer is directed.

acquiring_pot_id
required
string

The investor pot ID where the transfer is directed. The pot should be under the investor_account id provided for acquiring_account_id.

ceding_account_id
required
string

The account reference of the ceding party from which the transfer originates.

case_contact_id
string

Identifier of contact point within the receiving organisation for case queries.

Required when a default value is not set in the system. Optional when a default value is set in the system. System automatically sets the default value if the request doesn’t have a value. If the request has a value and system has a default value, the value in the transfer request will be taken in.

The input value should match with a contact setup under origo static data. If not, the request will be rejected.

age_evidence_seen_by_receiving_provider
boolean

Indicates that evidence of age has been supplied by the client.

member_subject_to_bankruptcy_order
boolean

Indicates that the client has received a court order regarding bankruptcy.

object

Adviser firm associated with the transfer.

nb_application_received_date
required
string <date>

The date that the transfer request was received from the investor. Should be on YYYY-MM-DD format.

payment_account_id
string

Identifier (assigned by the service_provider) of the bank account of the receiving organisation that is used to receive cash.

Required when a default value is not set in the system.

Optional when a default value is set in the system. System automatically sets the default value if the request doesn’t have a value.

The input value should match with an acquiring bank account setup under origo static data. If not, the request will be rejected.

scheme_reference_identifier
string

Identifier (assigned by the service_provider) of the PSTRN record of the receiving organisation related to the scheme type of the transfer.

Required when a default value is not set in the system and scheme_type=SIPP.

Optional when a default value is set in the system and scheme_type=SIPP. System automatically sets the default value if the request doesn’t have a value.

If the request has a value and the system has a default value, the value in the transfer will be taken.

The input value should match with a PSTRN setup under origo static data. If not, the request will be rejected.

ceding_provider_id
required
string

Identifier (assigned by the service_provider) of the ceding organisation.

The input value should match with an organization setup under origo static data. If not, the request will be rejected.

transfer_note
string <= 500 characters

Initial information the receiving organisation wishes to make known to the ceding organisation regarding the transfer.

approximate_value_of_pre_retirement_benefits
required
string

Approximate value of pre-retirement benefits to transfer. Numeral string with two decimal point precision

financial_product_id
required
string
Value: "sipp_accumulation"

Only "sipp_accumulation" is allowed currently

purpose
string
Enum: "cash" "invest"

Default value will be "cash" if not set. When set to "cash", transferred funds remain as cash in the acquiring pot. When set to "invest" and the pot has a portfolio attached, it will trigger portfolio investment instructions based on the portfolio configuration.

Responses

Request samples

Content type
application/json
{
  • "request_id": "e6ac449f-4b29-6116-ac05-b3c9d27ef2f1",
  • "service_provider": "origo",
  • "scheme_type": "sipp",
  • "transfer_type": "cash",
  • "encash_all": true,
  • "acquiring_account_id": "SIPPACC1729649516361",
  • "acquiring_pot_id": "pot-IPY5525148",
  • "ceding_account_id": "5823364",
  • "nb_application_received_date": "2024-10-27",
  • "ceding_provider_id": "12251",
  • "approximate_value_of_pre_retirement_benefits": "100.50",
  • "financial_product_id": "sipp_accumulation",
  • "case_contact_id": "5648",
  • "age_evidence_seen_by_receiving_provider": true,
  • "member_subject_to_bankruptcy_order": true,
  • "payment_account_id": "37643",
  • "scheme_reference_identifier": "4844",
  • "purpose": "cash"
}

Response samples

Content type
application/json
{
  • "transfer_id": "TRF-IN-PRC7054758",
  • "service_provider": "origo",
  • "scheme_type": "sipp",
  • "financial_product_id": "sipp_accumulation",
  • "transfer_type": "cash",
  • "encash_all": true,
  • "acquiring_account_id": "SIPPACC1727260918931",
  • "acquiring_pot_id": "pot-OBO1112665",
  • "ceding_account_id": "Test145824",
  • "investor_details": {
    },
  • "receiving_contract": {
    },
  • "ceding_contract": {
    },
  • "transfer_creation_date": "2024-10-21T02:10:47.161Z",
  • "scheme_reference_identifier": "14562",
  • "transfer_note": "Note 14587",
  • "created_at": "2024-10-21T02:10:47.339Z",
  • "purpose": "cash"
}

Retrieve all transfers

Retrieve all transfers

Authorizations:
ApiSecretKey
query Parameters
financial_product_id
string
Enum: "sipp_accumulation" "sipp_fad"
service_provider
string
Enum: "wealthos" "origo"
service_provider_status
string
Enum: "Unallocated" "In Progress" "Funds Received" "Funds sent" "Cancelled" "Out of Scope" "Not Found" "Already Transferred"
investor_id
string
transfer_status
string
Enum: "Created" "Pending" "In progress" "Ceding completed" "Acquiring received" "Acquiring completed" "Rejected" "Cancelled"
updated_at
string

Should be on YYYY-MM-DD format

page_size
string

Page size for the query. This end-point has pagination capabilities. This value should be a positive integer value. If this is not provided or provided without page_number, both page_size and page_number will be defaulted to 1000 and 1. Max page size is [1000].

page_number
string

Page number for the query. This end-point has pagination capabilities. This value should be a positive integer value. If this is not provided or provided without page_size, both page_size and page_number will be defaulted to 1000 and 1.

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/transfers/v1?financial_product_id=SOME_STRING_VALUE&service_provider=SOME_STRING_VALUE&service_provider_status=SOME_STRING_VALUE&investor_id=SOME_STRING_VALUE&transfer_status=SOME_STRING_VALUE&updated_at=SOME_STRING_VALUE&page_size=SOME_STRING_VALUE&page_number=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "transfers": [
    ],
  • "next_page_available": true
}

Get transfer summary

Get the latest summary of a transfer by transfer_id.

Authorizations:
ApiSecretKey
path Parameters
transfer_id
required
string

Transfer ID

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url https://web_host_name/tenant/transfers/v1/%7Btransfer_id%7D \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "transfer_id": "TRF-IN-WHS4697677",
  • "direction": "in",
  • "service_provider": "origo",
  • "transfer_type": "cash",
  • "transfer_status": "In progress",
  • "service_provider_status": "Unallocated",
  • "encash_all": true,
  • "acquiring_account_id": "SIPPACC1731477396232",
  • "acquiring_pot_id": "pot-YHS7473175",
  • "case_contact_id": "5906",
  • "ceding_account_id": "5823364",
  • "investor_details": {
    },
  • "receiving_contract": {
    },
  • "ceding_contract": {
    },
  • "case_id": "377551",
  • "client_transfer_id": "364415",
  • "transfer_creation_date": "2024-12-02T15:55:06.719Z",
  • "created_at": "2024-12-02T15:55:06.999Z",
  • "updated_at": "2024-12-02T15:58:02.704Z"
}

Cancel transfer in

This endpoint allows users to cancel transfer requests that are in 'Created' or 'In-progress' status. A successful request will result in the transfer status being updated to 'Cancelled' and will return the updated transfer details. This endpoint currently supports SIPP transfers where the service provider is Origo.

path Parameters
transfer_id
required
string

Transfer ID

Request Body schema: application/json
cancellation_reason
string
Enum: "By Client Pre Completion" "Client Death" "Deferment" "Duplicate" "Data Entry Error" "Incorrect Ceding Provider"

Mandatory when cancelling a transfer in In progress status.

comment
string

Responses

Request samples

Content type
application/json
{
  • "comment": "Client requested cancellation due to change in circumstances",
  • "cancellation_reason": "By Client Pre Completion"
}

Response samples

Content type
application/json
{
  • "transfer_id": "TRF-IN-PRC7054758",
  • "service_provider": "origo",
  • "scheme_type": "sipp",
  • "transfer_type": "cash",
  • "encash_all": true,
  • "acquiring_account_id": "SIPPACC1727260918931",
  • "acquiring_pot_id": "pot-OBO1112665",
  • "ceding_account_id": "Test145824",
  • "case_contact_id": 6198,
  • "investor_details": {
    },
  • "receiving_contract": {
    },
  • "ceding_contract": {
    },
  • "transfer_creation_date": "2024-10-21T02:10:47.161Z",
  • "scheme_reference_identifier": "14562",
  • "purpose": "cash",
  • "transfer_note": "Note 14587",
  • "comment": "Client requested cancellation due to change in circumstances",
  • "transfer_status": "Cancelled",
  • "cancellation_reason": "By Client Pre Completion",
  • "created_at": "2024-10-21T02:10:47.339Z",
  • "updated_at": "2024-12-02T15:58:02.704Z"
}

Distribution Partners

API endpoints for managing distribution partners (White Label Partners, IFA Firms, and Individual IFAs) in the platform.

Enables creation and management of these entities while maintaining their hierarchical relationships, where IFAs belong to IFA Firms, and IFA Firms can optionally belong to White Label Partners. There are endpoints also to manage the assignment and de-assignment of distribution partners from different investor entities (currently limited to assignment at account level and will be extended in the future to manage assignment at investor level as well as pot level).

Create a distribution partner

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
request_id
required
string

Unique request identifier.

partner_name
required
string

Name of the Distribution partner.

partner_type
required
string
Enum: "white_label" "ifa_firm" "ifa"

Type of the Distribution partner.

parent_partner_id
string

ID of the parent partner, Required only for IFAs.

contact_name
string

Name of the contact person. Mainly for ifa_firm and white_label partners.

object
object

Responses

Request samples

Content type
application/json
{
  • "request_id": "20b904f7-8d05-4efd-bd36-4ec3b1ce8e03",
  • "partner_name": "ABC Inc",
  • "partner_type": "white_label",
  • "parent_partner_id": "iff-gfv35697",
  • "contact_name": "David Brown",
  • "contact_details": {
    },
  • "regulatory_details": {
    }
}

Response samples

Content type
application/json
{
  • "distribution_partner_id": "ifa-gfv35697",
  • "partner_name": "ABC Inc",
  • "partner_type": "white_label",
  • "parent_partner_id": "iff-gfv35697",
  • "contact_name": "string",
  • "contact_details": {
    },
  • "regulatory_details": {
    },
  • "reference_version": 1,
  • "created_at": "2020-07-08T07:36:05.884Z",
  • "updated_at": "2020-07-10T07:36:05.884Z"
}

Update a distribution partner

Authorizations:
ApiSecretKey
path Parameters
distribution_partner_id
required
string

Distribution Partner Id

header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
request_id
required
string

Unique request identifier.

reference_version
required
integer

Should match with the current reference version of the resource

partner_name
string

Name of the Distribution partner.

contact_name
string

Name of the contact person. Mainly for ifa_firm and white_label partners.

object
object

Responses

Request samples

Content type
application/json
{
  • "request_id": "20b904f7-8d05-4efd-bd36-4ec3b1ce8e03",
  • "reference_version": 2,
  • "partner_name": "ABC Inc",
  • "contact_name": "string",
  • "contact_details": {
    },
  • "regulatory_details": {
    }
}

Response samples

Content type
application/json
{
  • "distribution_partner_id": "ifa-gfv35697",
  • "partner_name": "ABC Inc",
  • "partner_type": "white_label",
  • "parent_partner_id": "iff-gfv35697",
  • "contact_name": "string",
  • "contact_details": {
    },
  • "regulatory_details": {
    },
  • "reference_version": 1,
  • "created_at": "2020-07-08T07:36:05.884Z",
  • "updated_at": "2020-07-10T07:36:05.884Z"
}

Get a distribution partner

Authorizations:
ApiSecretKey
path Parameters
distribution_partner_id
required
string

Distribution Partner Id

query Parameters
include_hierarchies
boolean

Include parent and child partner details

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/distribution-partners/v1/%7Bdistribution_partner_id%7D?include_hierarchies=SOME_BOOLEAN_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "distribution_partner_id": "ifa-gfv35697",
  • "partner_name": "ABC Inc",
  • "partner_type": "white_label",
  • "parent_partner_id": "iff-gfv35697",
  • "contact_name": "string",
  • "contact_details": {
    },
  • "regulatory_details": {
    },
  • "reference_version": 1,
  • "created_at": "2020-07-08T07:36:05.884Z",
  • "updated_at": "2020-07-10T07:36:05.884Z",
  • "hierarchies": {
    }
}

Manage distribution partner assignment

Authorizations:
ApiSecretKey
path Parameters
action
required
string
Enum: "assign" "de-assign"

Action to perform. Currently only action "assign" is supported.

header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
request_id
required
string

Unique request identifier.

distribution_partner_id
required
string

Unique system generated distribution partner identifier.

entity_type
required
string
Enum: "investor" "account" "pot"

Type of the entity distribution partner is assigned to. Currenlty only types "account" and "investor" are supported.

entity_id
required
string

Unique system generated ID for the entity. An entity can be an investor, account or a pot.

Responses

Request samples

Content type
application/json
{
  • "request_id": "20b904f7-8d05-4efd-bd36-4ec3b1ce8e03",
  • "distribution_partner_id": "ifa-gfv35697",
  • "entity_type": "account",
  • "entity_id": "LISAC1699158978930"
}

Response samples

Content type
application/json
{
  • "distribution_partner_id": "ifa-gfv35697",
  • "entity_type": "account",
  • "entity_id": "LISAC1699158978930"
}

Get distribution partners assigned for an entity

Authorizations:
ApiSecretKey
query Parameters
entity_id
required
string

Id of an investor, account or a pot. Currenlty only an account id is supported.

entity_type
required
string
Enum: "investor" "account" "pot"

Type of the entity. Currenlty only types "account" and "investor" are supported.

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/distribution-partner-assignments/v1/distribution-partners?entity_id=SOME_STRING_VALUE&entity_type=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "distribution_partners": [
    ]
}

Get entities assigned for a distribution partner

Authorizations:
ApiSecretKey
query Parameters
distribution_partner_id
required
string

Id of the distribution partner.

entity_type
string
Enum: "investor" "account" "pot"

Type of the entity.

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/distribution-partner-assignments/v1/entities?distribution_partner_id=SOME_STRING_VALUE&entity_type=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "distribution_partner_id": "ifa-gfv35697",
  • "partner_name": "ABC Inc",
  • "partner_type": "white_label",
  • "assigned_entities": [
    ]
}

Files

This feature is currently in BETA mode

This API endpoint allows you to to retrieve files.

Get document data (BETA)

This endpoint will retrieve details of a particular file in the system.

Authorizations:
ApiSecretKey
path Parameters
file_id
required
string

File ID

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url https://web_host_name/tenant/files/v1/%7Bfile_id%7D \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "file_id": "FILE-AHY58878",
  • "file_name": "HSBC",
  • "tags": [
    ],
  • "uploaded_date": "1990-12-09"
}

Retrieve document (BETA)

This endpoint will provide a download url of a particular file in the system.

Authorizations:
ApiSecretKey
path Parameters
file_id
required
string

File ID

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url https://web_host_name/tenant/files/v1/%7Bfile_id%7D/url \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{}

Interests

The interest endpoint grouping consists of various endpoints applicable to interest calculation module within the system

Get daily breakdown

The endpoint supports retrieval of daily values of interest calculations

Authorizations:
ApiSecretKey
query Parameters
deposit_reference
required
string
Example: deposit_reference=CDR-TUY96080

Unique ID assigned to the deposit by the system.

start_date
string
Example: start_date=2025-01-01

The start date of the daily interest snapshot to be retrieved from the API. Should be on YYYY-MM-DD format.

end_date
string
Example: end_date=2025-02-01

The end date of the daily interest snapshot to be retrieved from the API. Should be on YYYY-MM-DD format.

page_size
string
Example: page_size=10

Page size for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_number, both page_size and page_number will be defaulted to 1000 and 1. Max page size is 8000.

page_number
string
Example: page_number=3

Page number for the query. This end-point has paginations capabilities. This value should be a positive integer value. If this is not provided or provided without page_size, both page_size and page_number will be defaulted to 1000 and 1.

sort
string
Default: "desc"
Enum: "asc" "desc"
Example: sort=asc

Sorting order; results are sorted by interest calculation date.

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/interests/v1/daily-breakdown?deposit_reference=SOME_STRING_VALUE&start_date=SOME_STRING_VALUE&end_date=SOME_STRING_VALUE&page_size=SOME_STRING_VALUE&page_number=SOME_STRING_VALUE&sort=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "deposit_reference": "CDR-INJ04880",
  • "daily_breakdown": [
    ],
  • "next_page_available": false
}

Third Party Payers

The third-party payers endpoint allows users to create, update, and retrieve third-party payers. Third-party payers can be created for investors, and investors can have single or multiple active third-party payers.

Create new third-party payer

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
type
required
string
Enum: "individual" "organisation"

Type of the third-party payer

title
string

Title of the individual

first_name
string <= 100 characters

Required only if type: individual

last_name
string [ 2 .. 100 ] characters

Required only if type: individual

organisation_name
string <= 100 characters

Required only if type: organisation

representative
string <= 200 characters

Name of the representative of the organisation in its relationship with the investor. Applicable only when the payer type is organisation.

phone_number
string

Phone number of the third-party payer

email
string

Email address of the third-party payer

investor_id
required
string

ID of the investor

date_of_birth
string <date>

Date of birth of the third-party payer. Mandatory only if type: individual. Should be on YYYY-MM-DD format.

relationship_to_investor
required
string
Enum: "parent" "grandparent" "legal_guardian" "other"

The value of relationship_to_investor must always be “other” when type is organisation

aml_status
required
string
Enum: "submitted" "kyc_failed_error" "pending" "clear" "not_started"

Specifies the KYC (Know Your Customer) / KYB (Know Your Business) AML status of the third-party payer.

object
status
string
Enum: "active" "inactive"

active is only allowed if aml_status is clear

Responses

Request samples

Content type
application/json
{
  • "type": "individual",
  • "title": "Mr",
  • "first_name": "John",
  • "last_name": "Doe",
  • "organisation_name": "ABC Corporation Ltd",
  • "representative": "Jane Smith",
  • "phone_number": "+441234567890",
  • "email": "john.doe@example.com",
  • "investor_id": "inv-QXR38578",
  • "date_of_birth": "1980-01-01",
  • "relationship_to_investor": "parent",
  • "aml_status": "clear",
  • "address": {
    },
  • "status": "active"
}

Response samples

Content type
application/json
{
  • "third_party_payer_id": "tpp-ZWY58878",
  • "type": "individual",
  • "title": "Mr",
  • "first_name": "John",
  • "last_name": "Doe",
  • "organisation_name": "ABC Corporation Ltd",
  • "representative": "Jane Smith",
  • "phone_number": "+441234567890",
  • "email": "john.doe@example.com",
  • "investor_id": "inv-QXR38578",
  • "date_of_birth": "1980-01-01",
  • "relationship_to_investor": "parent",
  • "aml_status": "clear",
  • "address": {
    },
  • "status": "active",
  • "created_at": "2020-01-01T00:00:00.000Z",
  • "updated_at": "2020-01-01T00:00:00.000Z",
  • "reference_version": 1
}

Retrieve all the third-party payers of an investor

Authorizations:
ApiSecretKey
query Parameters
investor_id
required
string

Valid Investor ID

status
string
Enum: "active" "inactive"

Status of the third-party payer

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/third-party-payers/v1?investor_id=SOME_STRING_VALUE&status=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "thirdPartyPayers": [
    ]
}

Retrieve a third-party payer

Authorizations:
ApiSecretKey
path Parameters
third_party_payer_id
required
string

Third Party Payer ID

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url https://web_host_name/tenant/third-party-payers/v1/%7Bthird_party_payer_id%7D \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "third_party_payer_id": "tpp-ZWY58878",
  • "type": "individual",
  • "title": "Mr",
  • "first_name": "John",
  • "last_name": "Doe",
  • "organisation_name": "ABC Corporation Ltd",
  • "representative": "Jane Smith",
  • "phone_number": "+441234567890",
  • "email": "john.doe@example.com",
  • "investor_id": "inv-QXR38578",
  • "date_of_birth": "1980-01-01",
  • "relationship_to_investor": "parent",
  • "aml_status": "clear",
  • "address": {
    },
  • "status": "active",
  • "created_at": "2020-01-01T00:00:00.000Z",
  • "updated_at": "2020-01-01T00:00:00.000Z",
  • "reference_version": 1
}

Update a third-party payer

Authorizations:
ApiSecretKey
path Parameters
third_party_payer_id
required
string

Third Party Payer ID

header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
title
string

Title of the individual

first_name
string <= 100 characters

Required only if type: individual

last_name
string [ 2 .. 100 ] characters

Required only if type: individual

organisation_name
string <= 100 characters

Required only if type: organisation

representative
string <= 200 characters

Name of the representative of the organisation in its relationship with the investor. Applicable only when the payer type is organisation.

phone_number
string

Phone number of the third-party payer

email
string

Email address of the third-party payer

date_of_birth
string <date>

Date of birth of the third-party payer. Mandatory only if type: individual. Should be on YYYY-MM-DD format.

relationship_to_investor
string
Enum: "parent" "grandparent" "legal_guardian" "other"

The value of relationship_to_investor must always be “other” when type is organisation

aml_status
string
Enum: "submitted" "kyc_failed_error" "pending" "clear" "not_started"

Specifies the KYC (Know Your Customer) / KYB (Know Your Business) AML status of the third-party payer.

object
status
string
Enum: "active" "inactive"

active is only allowed if aml_status is clear

reference_version
required
integer

Responses

Request samples

Content type
application/json
{
  • "title": "Mr",
  • "first_name": "John",
  • "last_name": "Doe",
  • "organisation_name": "ABC Corporation Ltd",
  • "representative": "Jane Smith",
  • "phone_number": "+441234567890",
  • "email": "john.doe@example.com",
  • "date_of_birth": "1980-01-01",
  • "relationship_to_investor": "parent",
  • "aml_status": "clear",
  • "address": {
    },
  • "status": "active",
  • "reference_version": 1
}

Response samples

Content type
application/json
{
  • "third_party_payer_id": "tpp-ZWY58878",
  • "type": "individual",
  • "title": "Mr",
  • "first_name": "John",
  • "last_name": "Doe",
  • "organisation_name": "ABC Corporation Ltd",
  • "representative": "Jane Smith",
  • "phone_number": "+441234567890",
  • "email": "john.doe@example.com",
  • "investor_id": "inv-QXR38578",
  • "date_of_birth": "1980-01-01",
  • "relationship_to_investor": "parent",
  • "aml_status": "clear",
  • "address": {
    },
  • "status": "active",
  • "created_at": "2020-01-01T00:00:00.000Z",
  • "updated_at": "2020-01-01T00:00:00.000Z",
  • "reference_version": 1
}

Contributing Employers

Create new contributing employer

Authorizations:
ApiSecretKey
header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
name
required
string <= 100 characters

Name of the contributing employer

investor_id
required
string

ID of the investor

registration_number
required
string

Registration number of the contributing employer

required
object
status
required
string
Enum: "active" "inactive"

Status of the contributing employer

Array of objects

Allow to create only one bank account when creating a new contributing employer.

Responses

Request samples

Content type
application/json
{
  • "name": "Acme Ltd",
  • "investor_id": "inv-XUT11265",
  • "registration_number": "12345678",
  • "address": {
    },
  • "status": "active",
  • "bank_accounts": [
    ]
}

Response samples

Content type
application/json
{
  • "contributing_employer_id": "cem-ZWY58878",
  • "name": "Acme Ltd",
  • "investor_id": "inv-QXR38578",
  • "registration_number": "12345678",
  • "address": {
    },
  • "status": "active",
  • "bank_accounts": [
    ],
  • "reference_version": 1,
  • "created_at": "2020-01-01T00:00:00.000Z",
  • "updated_at": "2020-01-01T00:00:00.000Z"
}

Retrieve all the contributing employers of a particular investor

Authorizations:
ApiSecretKey
query Parameters
investor_id
string

Valid Investor ID

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url 'https://web_host_name/tenant/contributing-employers/v1?investor_id=SOME_STRING_VALUE' \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "contributingEmployers": [
    ]
}

Retrieve a particular contributing employer

Authorizations:
ApiSecretKey
path Parameters
contributing_employer_id
required
string

Contributing Employer ID

header Parameters
x-api-key
required
string

ApiSecretKey

Responses

Request samples

curl --request GET \
  --url https://web_host_name/tenant/contributing-employers/v1/%7Bcontributing_employer_id%7D \
  --header 'x-api-key: REPLACE_KEY_VALUE'

Response samples

Content type
application/json
{
  • "contributing_employer_id": "cem-ZWY58878",
  • "name": "Acme Ltd",
  • "investor_id": "inv-QXR38578",
  • "registration_number": "12345678",
  • "address": {
    },
  • "status": "active",
  • "bank_accounts": [
    ],
  • "reference_version": 1,
  • "created_at": "2020-01-01T00:00:00.000Z",
  • "updated_at": "2020-01-01T00:00:00.000Z"
}

Update a particular contributing employer

Authorizations:
ApiSecretKey
path Parameters
contributing_employer_id
required
string

Contributing Employer ID

header Parameters
x-api-key
required
string

ApiSecretKey

Request Body schema: application/json
name
string <= 100 characters

Name of the contributing employer

registration_number
string

Registration number of the contributing employer

object
status
string
Enum: "active" "inactive"

Status of the contributing employer

reference_version
required
integer

Responses

Request samples

Content type
application/json
{
  • "name": "Acme Ltd",
  • "registration_number": "12345678",
  • "address": {
    },
  • "status": "active",
  • "reference_version": 1
}

Response samples

Content type
application/json
{
  • "contributing_employer_id": "cem-ZWY58878",
  • "name": "Acme Ltd",
  • "investor_id": "inv-QXR38578",
  • "registration_number": "12345678",
  • "address": {
    },
  • "status": "active",
  • "bank_accounts": [
    ],
  • "reference_version": 1,
  • "created_at": "2020-01-01T00:00:00.000Z",
  • "updated_at": "2020-01-01T00:00:00.000Z"
}