{ "aid": "wealthos.com:main-v1", "name": "WealthOS API", "type": "Index", "description": "Welcome to WealthOS. Here you will find the comprehensive set of information you need to rapidly build rich digital wealth management features. \n# Getting Started\nBefore you start developing your features using the WealthOS API, please make sure that the following steps are complete:\n\n* Set-up your own environment unique to your organisation using the link we have provided\n* Follow the step-by-step [guide](https://wos-gb.sandbox.wealthos.cloud/admin/documentation) to configuring your environment\n* Sign-up and obtain keys for sandbox environments of all 3rd party integrations you require from the market place of available integrations in WealthOS\n* Setup the keys of the 3rd party integrations within the WealthOS Admin UI\n\nOnce you have set yourself up, you can add other users who will be able to collaborate with you.\n\n---\n# WealthOS API Basics\nThe 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. \n\nYour API URLs will be in the following formats:\n\n**RESTful API** - https://{unique_tenancy_identifier}.sandbox.wealthos.cloud/tenant/{endpoint}/v1\n\n``` E.g. https://acorn-gb.sandbox.wealthos.cloud/investors/v1```\n\n**Websocket API** - wss://{unique_tenancy_identifier}-ws.sandbox.wealthos.cloud/ws/\n\n``` E.g. wss://acorn-gb-ws.sandbox.wealthos.cloud/ws/```\n\nThe Websocket API is used by WealthOS to push asynchronous notifications to your application.\n\n---\n# Authentication\nThe 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. \n\n## Testing your keys\nYou may test your keys by calling on the following endpoints. \n\n### RESTful API\nTo test the **secret key**: Perform a GET call on ```~/tenant/test/hello-world-be```\n\n### Socket API\n In order to authenticate a Websocket API call, a query parameter x-token must be included within the URL. \n\nx-token = your organisation’s secret key \n\nFull URL must read as follows: \n````\nwss://{unique_tenancy_identifier}-ws.sandbox.wealthos.cloud/ws?x-token=\n````\n---\n# Idempotency\nSome 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.\n\n#### Sample response\n\n```json\n\n{\n \"status\": 400,\n \"body\": {\n \"message\" : \"duplicate request\", \n \"status\" : \"COMPLETE|PROCESSING\", \n \"response\" : \"\"\n }\n}\n\n```\nThe `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.\n\n---\n# Entity Versioning\nWealthOS 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. \n\nWhen 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.\n\nWith each sucessful update done to the entity via the API the system will increment the `reference_version`. \n\n---\n# Limits\n\nCurrently there are limits to the number of requests that can be made to the WealthOS API. Following are these limits:\n* Average requests per second 500\n* Burst requests 1000\n* Total requests per day 10,000\n\n---\n# FAQ\n\n- **How do I see my API keys and how do I re-new the keys?**\n - 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. \n\n- **Is it mandatory to connect to the web socket**\n - 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.\n\n---\n# Socket API\n## Intro\nWeb socket API is used by the WOS system to notify (push) asynchronous events to the Wealth Manager BE\n## Accessing the Socket api\nYour Socket API URL would be wss://{socket api root}/ws\n\nFor example lets assume your env is `gb` and tenant id is `acorn`. Then,\n\n- Socket API Root: acorn-gb-ws.sandbox.wealthos.cloud\n\n- Socket API URL: wss://acorn-gb-ws.sandbox.wealthos.cloud/ws\n## Authenticating Socket Connection\nWealthOS 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.\n\n`x-token` is the ApiSecretKey given you by the WealthOS system\n\nSo the actual connection URL must look like\n\n```\nwss://acme-gb-ws.sandbox.wealthos.cloud/ws?x-token=\n```\n## Channels\nWealthOS 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.\n\nMessages sent via the channels will be strictly ordered by the event generation time. However, there is no guarantee of ordering messages across channels.\n\nA generic data message passed through the socket looks like,\n\n```json\n{\n type: \"a string tag that identifies the message\"\n resend: \"[optional] Indicates whether this is a resend message. Resends can be sent during explicit recovery servicing or due to server recovering from errors\"\n ch: \"channel name\" \n payload: { \n .... \n }\n id: \"unique id for this message\"\n ts: \"unique sequence number of message\"\n \n}\n``` \n**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.\n## Subscribe\nSent from client to server to subscribe to a channel.\n * Channel name should be specified in the `ch` attribute.\n * Unique request id must be sent in the `req_id` attribute.\n\n```\n{\n \"type\": \"subscription\",\n \"ch\": \"channel to be subscribed\",\n \"req_id\": \"request ID\",\n \"from_ts\": past sequence number / Timestamp value (milliseconds)\n}\n```\nServer 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.\n\n```\n{\n \"type\": \"subscription\",\n \"ch\": \"subscribed channel\",\n \"req_id\": \"request ID\",\n \"status\": \"ACK\"\n}\n```\n\n```\n{\n \"type\": \"subscription\",\n \"ch\": \"subscribed channel\",\n \"req_id\": \"request ID\",\n \"status\": \"NACK\",\n \"reason\": \"Error Message\"\n}\n```\n## Unsubscribe\nSent from client to server to unsubscribe from a channel.\n * Channel name should be specified in the `ch` attribute.\n * Unique request id must be sent in the `req_id` attribute.\n\n```\n{\n \"type\": \"unsubscription\",\n \"ch\": \"channel to be unsubscribed\",\n \"req_id\": \"request ID\"\n}\n```\nServer 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.\n\n```\n{\n \"type\": \"unsubscription\",\n \"ch\": \"channel to be unsubscribed\",\n \"req_id\": \"request ID\",\n \"status\": \"ACK\"\n}\n```\n\n```\n{\n \"type\": \"unsubscription\",\n \"ch\": \"channel to be unsubscribed\",\n \"req_id\": \"request ID\",\n \"status\": \"NACK\",\n \"reason\": \"Error Message\"\n}\n```\n**NOTE**\n* Subscribing to an already subscribed channel will be rejected.\n* Client is expected to re-try, if no response is received within 60 secs\n \n\n## Heart beats\nThe 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\n\n```json\n{\n type: \"hb\",\n ch: \"system\"\n}\n```\n
\n \n

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

\n
\n
\n\n\n## Recover missed updates\nThe ws client can send a **past sequence number** with the subscription to receive missed updates from the provided sequence number onwards.\n\n```json\n{\n \"type\": \"subscription\",\n \"ch\": \"channel to be subscribed\",\n \"req_id\": \"request ID\",\n \"from_ts\": \"past sequence number\"\n}\n```\nServer responds with a **subscribe** message which echoes the request. Then the ws client will receive past socket updates from the provided sequence number onwards.\n\n```\n{\n \"type\": \"subscription\",\n \"ch\": \"subscribed channel\",\n \"req_id\": \"request ID\",\n \"status\": \"ACK\",\n \"from_ts\": 1625660972000\n}\n{\n \"type\": \"investor_status\",\n \"ch\": \"investors\",\n \"payload\": {\n \"investor_id\" : \"\",\n \"status\" : \"'fail' | 'success'\", \n \"error\" : \"\", \n \"event\": \"'kyc.started' | 'kyc.completed'\" \n },\n \"id\": \"fd232671-d47b-4ae2-a4c4-0a37258ffae5\",\n \"ts\": 1625660972222,\n \"resend\": true\n}\n```\n**NOTE**\n* If the provided sequence number equals **-1**, Then the system will send all the past socket updates to the client.\n* System only accepts integer type sequence number values.\n\n## Supported Channels\n\n- investors\n- payments\n- transactions \n- holdings\n- reconciliations\n- notifications\n\n### publish investors\n\nThis channel publishes investor related updates.\n\n#### Message\n\n\nThe investor channel publishes the following message types:\n- `investor_status` : This message type is used to communicate updates to the KYC/AML status of an investor\n\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type | string | message type | `investor_status` |\n| ch | string | channel name | `investors` |\n| payload.investor_id | string | unique Id of investor | |\n| payload.status | string | | `fail` , `success` |\n| payload.error | string | error text. Populated only on failure | |\n| payload.event | string | KYC status. Populated only if request is sucessful | `kyc.started`, `kyc.completed` |\n\n##### Examples\n```json\n{\n \"type\": \"investor_status\",\n \"ch\": \"investors\",\n \"payload\": {\n \"investor_id\" : \"inv-XUT11265\",\n \"status\" : \"success\", \n \"error\" : \"\", \n \"event\": \"kyc.completed\" \n },\n \"id\": \"fd232671-d47b-4ae2-a4c4-0a37258ffae5\",\n \"ts\": 1625660972222\n}\n```\n\n\n\n### publish payments\n\nThis channel publishes payment status related updates\n\n#### Message\n\nThe payments channel publishes the following message types:\n- `payment_update` : This message type is used to communicate updates to the status of the payment.\n\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type | string | | `payment_update` |\n| ch | string | | `payments` |\n| payload.transaction_id | string | Unique Id of the payment | |\n| payload.pot_id | string | Id of the pot the payment is directed to | |\n| payload.reason | string | This field populated only when payment intent status is failed or cancelled, with reason for cancellation or failure | |\n| payload.status | string | | `pending_confirmation`, `processing`, `succeeded`, `cancelled`, `failed` |\n\n##### Examples\n\n```json\n{\n \"type\": \"payment_update\",\n \"ch\": \"payments\",\n \"payload\": {\n \"transaction_id\" : \"80784c92-8f9d-4150-b83c-dc\",\n \"pot_id\" : \"pot-GYQ5423100\",\n \"status\" : \"succeeded\"\n },\n \"id\": \"fd232671-d47b-4ae2-a4c4-0a37258ffae5\",\n \"ts\": 1625660972222\n}\n```\n\n\n\n### publish transactions\n\nThis channel publishes various transaction related updates.\n\n#### Message\n\nThe transactions channel publishes the following message types:\n- `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.)\n- `transaction_updated` : This message type is used to communicate an update to a transaction.\n- `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).\n- `transaction_failed` : This message type is used to notify the user of a transaction failure.\n\n\n##### Payload\nFor 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](https://wos-gb.sandbox.wealthos.cloud/admin/documentation). \n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type | string | | `transaction_updated`,`transaction_initiated`,`external_transaction_added` |\n| ch | string | | `transactions` |\n| payload.transaction_id | string | Unique Id of the transaction | |\n| payload.parent_transaction_id | string | Parent Transaction ID | |\n| payload.external_transaction_reference | string | External Transaction Reference | |\n| payload.pot_id | string | Pot ID of the transaction | |\n| payload.investment_product_id | string | Invetment Prouct ID or cash | |\n| payload.client_order_id | string | (Optional) Order identifier assigned by the wealth manager | |\n| payload.primary_transaction_type | string | Primary Transaction Type | `Fees`,`Buy`,`Sell`,`Transfers`,`Income`,`Tax`,`Contribution`,`Withdrawal`,`Corporate actions` |\n| 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` |\n| payload.type | string | Type of the transaction | `pending`,`archived` |\n| payload.sub_type | string | Sub type of the transaction | `instructed`,`confirmed`,`priced`,`rejected`,`settled`,`cancelled`, `scheduled`, `failed` |\n| payload.currency | string | Currency of the pot | |\n| payload.direction | string | Direction of the transaction | `in`,`out` |\n| payload.transaction_quantity | string | Quantity of the investment product transaction. This will be empty for cash transactions | |\n| payload.transaction_value | string | Value of the transaction | |\n| payload.execution_price | string | Executed price of the buy, sell transaction | |\n| payload.trade_date | date | Will indicate the date where this transaction was effected | |\n| payload.settlement_date | date | Intendent settlement date of the pending transaction or actual the settled day of the transaction | |\n| payload.created_at | time | Transaction created date | |\n| payload.updated_at | time | Transaction last updated date | |\n| payload.additional_external_details | Object | Additional external details of the transaction, This may be populated in reconciliation process | |\n| payload.origin | string | Origin of the transaction | `api`, `admin_ui`, `file_upload`, `system` | \n| payload.source_id | string | transactions created for payments intents - employer contributions for SIPP Accumulation Products | | \n| payload.reason | string | This field populated only when status is failed or canceled, with reason for cancellation or failure | | \n##### Examples\n\n```json\n{\n \"type\": \"transaction_updated\",\n \"ch\": \"transactions\",\n \"object\": {\n \"pot_id\":\"pot-GYQ5423100\",\n \"transaction_id\":\"80784c92-8f9d-4150-b83c-dc\",\n \"investment_product_id\":\"GB0000495209\",\n \"primary_transaction_type\":\"Buy\",\n \"sub_transaction_type\":\"Buy\",\n \"type\":\"archived\",\n \"sub_type\":\"settled\",\n \"currency\":\"GBP\",\n \"direction\":\"in\",\n \"transaction_quantity\":\"20\",\n \"transaction_value\":\"129.69\",\n \"execution_price\":\"6.45\",\n \"trade_date\":\"2021-08-06\",\n \"settlement_date\":\"2021-08-06\",\n \"origin\": \"admin_ui\",\n \"source_id\": \"cem-ASP43560\",\n \"created_at\":\"2021-08-06T09:25:44.251Z\",\n \"updated_at\":\"2021-08-06T09:27:18.003Z\",\n \"external_transaction_reference\": \"117709248888833\"\n },\n \"id\":\"8e754ef9-5d63-4c2a-9f43-ac42f588e122\",\n \"ts\":1628244517263\n}\n```\n\n\n### publish holdings\n\nThis channel publishes holdings related updates.\n\n#### Message\n\nThe holdings channel publishes the following message types:\n- `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.\n\n##### Payload\nFor 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](https://wos-gb.sandbox.wealthos.cloud/admin/documentation). \n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type | string | | `holding_updated` |\n| ch | string | | `holdings` | \n| payload.pot_id | string | Id of the pot the payment is directed to | |\n| payload.investment_product_id | string | Investment product ID or 'cash' for cash | |\n| payload.currency | string | Currency of the pot | |\n| payload.total_quantity | string | Total Quantity of the investment product holding. This value is empty for cash holdings | |\n| payload.free_quantity | string | Free Quantity of the investment product holding. This value is empty for cash holdings | |\n| payload.locked_quantity | string | Locked Quantity of the investment product holding. This value is empty for cash holdings | |\n| payload.total_value | string | Total Value of the holding | |\n| payload.free_value | string | Free Value of the holding | |\n| payload.locked_value | string | Locked Value of the holding | |\n| payload.investment_product_name | string | Name of the investment product | |\n| payload.price | string | Price of the holding | |\n| payload.price_date | time | The time which the price is updated | |\n| payload.average_book_cost | string | Per-unit book cost for a particular holding (applicable for investment product holdings only) | |\n| payload.cost_of_holding | string | Total book cost for the total units currently held within the pot (applicable for investment product holdings only) | |\n| payload.settled_cash_position | string | Settled cash amount within the pot (applicable for cash holdings only) | |\n| payload.additional_external_details | Object | Additional external details of the holding, This may be populated in reconciliation process | |\n\n##### Examples\n\n```json\n{\n \"type\": \"holding_updated\",\n \"ch\": \"holdings\",\n \"payload\": {\n \"pot_id\":\"pot-GYQ5423100\",\n \"investment_product_id\":\"GB0000495209\",\n \"currency\":\"GBP\",\n \"total_quantity\":\"20\",\n \"free_quantity\":\"20\",\n \"locked_quantity\":\"0\",\n \"total_value\":\"137.358\",\n \"free_value\":\"137.358\",\n \"locked_value\":\"0\",\n \"investment_product_name\":\"BlackRock European Dynamic Fund A Accumulation\",\n \"price\":\"6.8679\",\n \"price_date\":\"2021-08-06T09:27:37.512Z\",\n \"average_book_cost\": \"5\",\n \"cost_of_holding\": \"100\" \n },\n \"id\":\"8e754ef9-5d63-4c2a-9f43-ac42f588e122\",\n \"ts\":1628244517263\n}\n```\n\n \n\n### publish reconciliations\n\nThe reconciliations channel publishes the following message types:\n- `investor_summary` : This message type is used to communicate a summary of investor reconciliation process.\n- `investor_mismatch` : This message type is used to communicate all mismatches in each investor reconciliations process.\n- `pot_summary` : This message type is used to communicate a summary of pot reconciliation process.\n- `pot_mismatch` : This message type is used to communicate all mismatches in each pot reconciliations process.\n- `transaction_summary` : This message type is used to communicate a summary of transaction reconciliation process.\n- `transaction_mismatch` : This message type is used to communicate mismatches in each transaction reconciliations process.\n- `transaction_ingestion_failure` : This message type is used to communicate ingestion failures in each transaction reconciliations process.\n- `transaction_ignored` : This message type is used to communicate all ignored transactions in each transaction reconciliations process.\n- `holdings_summary` : This message type is used to communicate a summary of holding reconciliation process.\n- `holdings_mismatch` : This message type is used to communicate all mismatches in each holding reconciliations process.\n\n#### Investor summary message\n##### Payload\n\t\t\t\n\n| Name | Type | Description | Accepted values |\n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `investor_summary` |\n| ch
Required | string | | `reconciliations` |\n| payload.job_id
Required | string | Unique Id of reconciliation process | |\n| payload.job_name
Required | string | type of reconciliations | |\n| payload.date
Required | string | date and time | |\n| payload.total_records
Required | number | total record count | |\n| payload.mismatched_records
Required | number | mismatched record count | |\n| payload.incoming_records
Required | number | incoming record count | |\n| payload.no_incoming_records
Required | number | no incoming record count | |\n\n\n##### Examples\n\n```json\n{\n \"type\":\"investor_summary\",\n \"ch\":\"reconciliations\",\n \"payload\":\n {\n \"job_id\":\"hydrangea-dc-210806-1628240463777\",\n \"job_name\":\"Investor Details\",\n \"date\":\"2021-08-09T06:49:34.227Z\",\n \"total_records\":1,\n \"mismatched_records\":1,\n \"incoming_records\": 0,\n \"no_incoming_records\": 0\n },\n \"id\":\"e1c7797f-f590-4490-a452-01894b33d014\",\n \"ts\":1628244517823\n}\n\n```\n\n#### Investor mismatch message\n##### Payload\n\n| Name | Type | Description | Accepted values |\n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `investor_mismatch` |\n| ch
Required | string | | `reconciliations` |\n| payload.job_id
Required | string | Unique Id of reconciliation process | |\n| payload.date
Required | string | date and time | |\n| payload.record_id
Required | string | unique id of a record | |\n| payload.investor_id | string | unique id of the investor being reconciled (if available) | |\n| payload.record_status
Required | string | record status | `reconciled`, `unreconciled`, `not_found`, `key_unavailable` |\n| payload.fields | object | mismatched fields with field, incoming_value, available_value and status | |\n| payload.fields.field
Required | string | Name of the fields | |\n| payload.fields.incoming_value | string | Incoming value for the field | |\n| payload.fields.available_value | string | Available value for the field | |\n| payload.fields.status | string | status of the field | `mismatched`, `matched` |\n\n##### Examples\n\n```json\n{\n \"type\":\"investor_mismatch\",\n \"ch\":\"reconciliations\",\n \"payload\":\n {\n \"job_id\":\"hydrangea-dc-210806-1628240463777\",\n \"date\":\"2021-08-09T06:49:34.227Z\",\n \"record_id\":\"F180010Q\",\n \"record_status\":\"not_found\",\n \"fields\":\n [\n {\"field\":\"first_name\",\"incoming_value\":\"David\",\"available_value\": \"Dane\", \"status\":\"mismatched\"},\n {\"field\":\"last_name\",\"incoming_value\":\"Brown\", \"available_value\": \"Black\", \"status\":\"mismatched\"}\n ]\n },\n \"id\":\"8e754ef9-5d63-4c2a-9f43-ac42f588e122\",\n \"ts\":1628244517263\n}\n\n```\n\n#### Pot summary message\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `pot_summary` |\n| ch
Required | string | | `reconciliations` |\n| payload.job_id
Required | string | Unique Id of reconciliation process | |\n| payload.job_name
Required | string | type of reconciliations | |\n| payload.date
Required | string | date and time | |\n| payload.total_records
Required | number | total record count | |\n| payload.mismatched_records
Required | number | mismatched record count | |\n| payload.incoming_records
Required | number | incoming record count | |\n| payload.no_incoming_records
Required | number | no incoming record count | |\n\n##### Examples\n\n```json\n{\n \"type\": \"pot_summary\",\n \"ch\": \"reconciliations\",\n \"payload\": {\n \"job_id\": \"dev14_recon_pot_200\",\n \"job_name\": \"Pot Details\",\n \"date\": \"2021-09-02T10:07:40.578Z\",\n \"total_records\": 91,\n \"mismatched_records\": 41,\n \"incoming_records\": 0,\n \"no_incoming_records\": 0\n },\n \"id\": \"c574d276-de4b-4014-80f3-80e54d31d3da\",\n \"ts\": 1630577304480\n}\n```\n\n#### Pot mismatch message\n##### Payload\n\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `pot_mismatch` |\n| ch
Required | string | | `reconciliations` |\n| payload.job_id
Required | string | Unique Id of reconciliation process | |\n| payload.date
Required | string | date and time | |\n| payload.record_id
Required | string | unique id of a record | |\n| payload.pot_id | string | unique id of the pot being reconciled (if available) | |\n| payload.record_status
Required | string | record status | `reconciled`, `unreconciled`, `not_found`, `key_unavailable` |\n| payload.fields | object | mismatched fields | |\n| payload.fields.field
Required | string | Name of the fields | |\n| payload.fields.incoming_value | string | Incoming value for the field | |\n| payload.fields.available_value | string | Available value for the field | |\n| payload.fields.status | string | status of the field | `matched`, `mismatched` |\n\n##### Examples\n\n```json\n{\n \"type\": \"pot_mismatch\",\n \"ch\": \"reconciliations\",\n \"payload\": {\n \"job_id\": \"dev14_recon_pot_200\",\n \"date\": \"2021-09-02T10:07:40.578Z\",\n \"record_id\": \"53_RWM\",\n \"record_status\": \"not_found\",\n \"fields\": [\n {\"field\": \"custodian_account_reference\",\"incoming_value\": \"F3A0023Q\",\"status\": \"mismatched\"},\n {\"field\": \"pot_currency\",\"incoming_value\": \"GBP\",\"status\": \"mismatched\"}\n \n ]\n },\n \"id\": \"7722f072-4e8d-48ec-ad4f-4543e64fb536\",\n \"ts\": 1630577304156\n}\n```\n\n#### Transaction summary message\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `transaction_summary` |\n| ch
Required | string | | `reconciliations` |\n| payload.job_id
Required | string | Unique Id of reconciliation process | |\n| payload.job_name
Required | string | Name of the reconciliations job | |\n| payload.date
Required | string | date and time | |\n| payload.total_records
Required | number | total record count | |\n| payload.mismatched_records
Required | number | mismatched record count | |\n| payload.updated_records
Required | number | updated record count | |\n| payload.unable_to_ingest
Required | number | ingestion failed record count | |\n| payload.ignored_records
Required | number | ignored record count | |\n| payload.incoming_records
Required | number | incoming record count | |\n| payload.no_incoming_records
Required | number | no incoming record count | |\n\n\n##### Examples\n\n```json\n{\n \"type\": \"transaction_summary\",\n \"ch\": \"reconciliations\",\n \"payload\": {\n \"job_id\": \"dev10_cat_inv_178\",\n \"job_name\": \"Transaction Details\",\n \"date\": \"2021-08-18T09:08:27.171Z\",\n \"total_records\": 8,\n \"mismatched_records\": 1,\n \"updated_records\": 4,\n \"unable_to_ingest\": 1,\n \"ignored_records\": 1,\n \"incoming_records\": 7,\n \"no_incoming_records\": 1\n },\n \"id\": \"7d3614c7-3f63-4930-88df-062c5059047d\",\n \"ts\": 1629277726128\n}\n```\n\n#### Transaction mismatch message\n##### Payload\n\n| Name | Type | Description | Accepted values |\n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `transaction_mismatch` |\n| ch
Required | string | | `reconciliations` |\n| payload.job_id
Required | string | Unique Id of reconciliation process | |\n| payload.date
Required | string | date and time | |\n| payload.record_id
Required | string | unique id of a record | |\n| payload.external_transaction_reference | string | External transaction reference (if available) | |\n| payload.transaction_ids | object | Transaction ids of mismatched records (if available) | |\n| payload.pot_id | string | Pot ID of the transaction (if available) | |\n| payload.record_status
Required | string | record status | `unreconciled`,`not_found`,`key_unavailable`, `multiple_found`, `no_incoming_record`, `updated` |\n| payload.fields | object | mismatched fields | |\n| payload.fields.field
Required | string | Name of the fields | |\n| payload.fields.incoming_value | string | Incoming value for the field | |\n| payload.fields.available_value | string | Available value for the field | |\n| payload.fields.status | string | status of the field | `matched`, `mismatched`, `key_value_missing` |\n\n##### Examples\n\n```json\n{\n\t\"type\":\"transaction_mismatch\",\n\t\"ch\":\"reconciliations\",\n\t\"payload\":{\"job_id\":\"peony-transaction_reconciliations-1630493472846\",\n\t\"date\":\"2021-09-01T10:51:18.577Z\",\n\t\"record_id\":\"2_RWM\",\n\t\"external_transaction_reference\":\"117709248888833\",\n \"transaction_ids\": [ \"80784c92-8f9d-4150-b83c-dc\" ],\n\t\"pot_id\":\"pot-GYQ5423100\",\n\t\"record_status\":\"unreconciled\",\n\t\"fields\":[\n\t{\n\t\t\"field\":\"primary_transaction_type\",\n\t\t\"incoming_value\":\"Buy\",\n\t\t\"available_value\":\"Corporate actions\",\n\t\t\"status\":\"mismatched\"\n\t},\n\t{\n\t\t\"field\":\"sub_transaction_type\",\n\t\t\"incoming_value\":\"Buy\",\n\t\t\"available_value\":\"Stock Split\",\n\t\t\"status\":\"mismatched\"\n },\n\t{\n\t\t\"field\":\"execution_price\",\n\t\t\"incoming_value\":null,\n\t\t\"status\":\"mismatched\"\n },\n\t{\n\t\t\"field\":\"trade_date\",\n\t\t\"incoming_value\":\"2021-08-31\",\n\t\t\"status\":\"mismatched\"\n\t},\n\t{\n\t\t\"field\":\"settlement_date\",\n\t\t\"incoming_value\":\"2021-09-02\",\n\t\t\"status\":\"mismatched\"\n\t}\n\t]\n},\n\t\"id\":\"0b3aa3b1-b14c-44ee-ac47-656149645ba9\",\n\t\"ts\":1630493491292\n}\n```\n\n#### Transaction ingestion failure message\n##### Payload\n\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `transaction_ingestion_failure` |\n| ch
Required | string | | `reconciliations` |\n| payload.job_id
Required | string | Unique Id of reconciliation process | |\n| payload.date
Required | string | date and time | |\n| payload.record_id
Required | string | unique id of a record | |\n| payload.external_transaction_reference | string | External transaction reference | |\n| payload.pot_id | string | Pot ID of the transaction (if available) | |\n| payload.record_status
Required | string | record status | `unable_to_ingest` |\n| payload.fields
Required | object | fields | |\n| payload.fields.field
Required | string | Name of the fields | |\n| payload.fields.incoming_value
Required | string | Incoming value for the field | |\n| payload.fields.status
Required | string | status of the field | `unrecognised`, `key_value_missing` |\n\n##### Examples\n\n```json\n{\n \"type\": \"transaction_ingestion_failure\",\n \"ch\": \"reconciliations\",\n \"payload\": {\n \"job_id\": \"peony-transaction_reconciliations-1630657432163\",\n \"date\": \"2021-09-03T08:23:54.373Z\",\n \"record_id\": \"3_RWM\",\n \"external_transaction_reference\": \"331738147053699\",\n \"record_status\": \"unable_to_ingest\",\n \"fields\": [\n {\n \"field\": \"custodian_account_reference\",\n \"incoming_value\": \"F3A0000A\",\n \"status\": \"unrecognised\"\n },\n {\n \"field\": \"pot_currency\",\n \"incoming_value\": \"GBP\",\n \"status\": \"unrecognised\"\n },\n {\n \"field\": \"investment_product_id\",\n \"incoming_value\": \"CA1358251\",\n \"status\": \"unrecognised\"\n }\n ]\n },\n \"id\": \"718f9758-e2b0-4a07-9cc6-8a6cb5aae419\",\n \"ts\": 1630657439928\n}\n```\n\n#### Transaction ignored failure message\n##### Payload\n\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `transaction_ignored` |\n| ch
Required | string | | `reconciliations` |\n| payload.job_id
Required | string | Unique Id of reconciliation process | |\n| payload.date
Required | string | date and time | |\n| payload.record_id
Required | string | unique id of a record | |\n| payload.record_status
Required | string | record status | `ignored` |\n\n##### Examples\n\n```json\n{\n \"type\": \"transaction_ignored\",\n \"ch\": \"reconciliations\",\n \"payload\": {\n \"job_id\": \"peony-transaction_reconciliations-1630657867836\",\n \"date\": \"2021-09-03T08:31:08.191Z\",\n \"record_id\": \"3_RWM\",\n \"record_status\": \"ignored\"\n },\n \"id\": \"8a82df6b-d34a-4eb9-91a1-b98cd18aa4e2\",\n \"ts\": 1630657913417\n} \n```\n#### Holding summary message\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `holdings_summary` |\n| ch
Required | string | | `reconciliations` |\n| payload.job_id
Required | string | Unique Id of reconciliation process | |\n| payload.job_name
Required | string | type of reconciliations | |\n| payload.date
Required | string | date and time | |\n| payload.total_records
Required | number | total record count | |\n| payload.mismatched_records
Required | number | mismatched record count | |\n| payload.incoming_records
Required | number | incoming record count | |\n| payload.no_incoming_records
Required | number | no incoming record count | |\n\n##### Examples\n\n```json\n{\n \"type\":\"holdings_summary\",\n \"ch\":\"reconciliations\",\n \"payload\":\n {\n \"job_id\":\"cat-holding_reconciliations-1631619829926\",\n \"job_name\":\"Holdings Details\",\n \"date\":\"2021-08-09T06:49:34.227Z\",\n \"total_records\":10,\n \"mismatched_records\":5,\n \"incoming_records\": 0,\n \"no_incoming_records\": 0\n },\n \"id\":\"e1c7797f-f590-4490-a452-01894b33d014\",\n \"ts\":1628244517823\n}\n\n```\n\n#### Holding mismatch message\n##### Payload\n\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `holding_mismatch` |\n| ch
Required | string | | `reconciliations` |\n| payload.job_id
Required | string | Unique Id of reconciliation process | |\n| payload.date
Required | string | date and time | |\n| payload.record_id
Required | string | unique id of a record | |\n| payload.pot_id | string | unique id of the pot being reconciled (if available) | |\n| payload.investment_product_id | string | unique id of the investment product being reconciled (if available) | |\n| payload.record_status
Required | string | record status | `reconciled`, `unreconciled`, `not_found`, `key_unavailable` |\n| payload.fields | object | mismatched fields with field, incoming_value, available_value and status | |\n| payload.fields.field
Required | string | Name of the fields | |\n| payload.fields.incoming_value | string | Incoming value for the field | |\n| payload.fields.available_value | string | Available value for the field | |\n| payload.fields.status | string | status of the field | `mismatched`, `matched`, `updated` |\n\n##### Examples\n\n```json\n{\n \"type\":\"holding_mismatch\",\n \"ch\":\"reconciliations\",\n \"payload\":\n {\n \"job_id\":\"cat-holding_reconciliations-1631619829926\",\n \"date\":\"2021-08-09T06:49:34.227Z\",\n \"record_id\":\"RWM_9_sr\",\n \"pot_id\": \"pot-GYQ5423100\",\n \"investment_product_id\": \"pqr\",\n \"record_status\":\"not_found\",\n \"fields\":\n [\n {\"field\":\"custodian_account_reference\",\"incoming_value\":\"F180010Q\",\"status\":\"mismatched\"},\n {\"field\":\"free_value\",\"incoming_value\":0, \"status\":\"mismatched\"}\n ]\n },\n \"id\":\"8e754ef9-5d63-4c2a-9f43-ac42f588e122\",\n \"ts\":1628244517263\n}\n\n```\n\n \n\n### publish notifications\n\nThis channel publishes general notifications.\n\n#### Message\n\n\nThe notifications channel publishes the following message types:\n- `recurring_contribution_activated` : This message type is used to communicate activation of recurring contribution requests\n- `recurring_contribution_cancelled` : This message type is used to communicate cancellation of recurring contribution requests\n- `recurring_contribution_rejected` : This message type is used to communicate rejection of recurring contribution requests\n- `recurring_contribution_authorization_url_received` : This message type is used to communicate that the authorization url is received for the recurring contribution\n- `recurring_contribution_resumed` : This message type is used to communicate resuming of recurring contribution requests\n- `recurring_contribution_finished` : This message type is used to communicate completion of recurring contribution requests\n- `recurring_contribution_updated` : This message type is used to communicate updates (mandate transferr, mandate replacement) of recurring contribution requests\n- `HMRC_LISA_investor_creation_failed` : This message type is used to communicate rejection of HMRC LISA investor creation requests\n- `HMRC_LISA_account_creation_failed` : This message type is used to communicate rejection of HMRC LISA investor account creation requests\n- `HMRC_LISA_account_creation_successful` : This message type is used to communicate completion of HMRC LISA investor and account creation requests\n\n#### Recurring contribution activation message\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `recurring_contribution_activated` |\n| ch
Required | string | | `notifications` |\n| payload.status
Required | string | Status of the recurring contribution | |\n| payload.contribution_name
Required | string | User given identifier for the contribution | |\n| payload.pot_id
Required | string | Pot ID of investor to direct the payment | |\n| payload.investor_id
Required | string | Investor ID of the investor making the contribution | |\n| payload.amount
Required | string | Amount as a numeral string with two decimal points | |\n| payload.sub_transaction_type
Required | string | Sub transaction type for recurring contribution | `Regular contribution`, `Regular contribution - non relievable`, `Regular contribution - Employer` |\n| payload.currency
Required | string | Currency configured for the pot | |\n| payload.payment_type
Required | string | Type of payment | |\n| payload.service_provider
Required | string | Service provider managing the recurring payment subscription | |\n| payload.purpose
Required | string | Purpose of the recurring contribution | `cash`, `invest` |\n| payload.source_id | string | Only for payments intents for employer contributions made towards SIPP Accumulation Products | |\n| payload.payment_schedule
Required | object | Parameters based on payment schedules | |\n| payload.payment_schedule.interval_unit
Required | string | Repeating interval unit of recurring payment | `monthly` |\n| payload.payment_schedule.interval
Required | number | Repeating interval of recurring payment | |\n| payload.payment_schedule.date | number | Date the payment is expected to be triggered if frequency is monthly | |\n| payload.payment_schedule.start_date
Required | string | Date to initiate the recurring payments | |\n| payload.payment_schedule.end_date | string | Date to conclude the recurring payments, if count is not provided | |\n| payload.payment_schedule.count | number | No of recurring payments to trigger before concluding the payments, if an end date is not provided | |\n| payload.contribution_id
Required | string | System generated unique id | |\n| payload.service_provider_params
Required | object | Parameters based on service provider | |\n| payload.service_provider_params.status
Required | string | Status transitions depend on the service provider | |\n| payload.service_provider_params.reason
Required | string | Reason for disabling/cancelling the contribution | |\n\n##### Examples\n```json\n{\n \"type\": \"recurring_contribution_activated\",\n \"ch\": \"notifications\",\n \"payload\": {\n \"status\": \"Active\",\n \"contribution_name\": \"GIA contribution-1\",\n \"pot_id\": \"pot-XWL3805770\",\n \"investor_id\": \"inv-QRY29279\",\n \"amount\": \"1000060.12\",\n \"sub_transaction_type\": \"Regular contribution\",\n \"currency\": \"GBP\",\n \"payment_type\": \"direct_debit\",\n \"service_provider\": \"gocardless\",\n \"purpose\": \"cash\",\n \"payment_schedule\": {\n \"interval_unit\": \"monthly\",\n \"interval\": 7,\n \"date\": 1,\n \"start_date\": \"2024-04-02T00:00:00.000Z\",\n \"end_date\": \"2024-04-03T00:00:00.000Z\"\n },\n \"contribution_id\": \"RCB-GC-JSJ6709\",\n \"service_provider_params\": {\n \"status\": \"Subscription created\",\n \"authorization_reference\" : \"EV0159P7DZB2P6\",\n \"contribution_reference\" : \"BRQ00030E3DXA4P\",\n \"request_id\" : \"BRF00014ZXYN5V4F05M90GZEQCARE84K\",\n \"authorization_url\": \"https://authexample.gocardless-sandbox.com\"\n }\n },\n \"id\": \"952c7d0a-ecc6-4538-86f4-ad021f6855d0\",\n \"ts\": 1683086449658,\n \"resend\": true\n}\n```\n\n#### Recurring contribution cancellation message\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `recurring_contribution_cancelled` |\n| ch
Required | string | | `notifications` |\n| payload.status
Required | string | Status of the recurring contribution | |\n| payload.contribution_name
Required | string | User given identifier for the contribution | |\n| payload.pot_id
Required | string | Pot ID of investor to direct the payment | |\n| payload.investor_id
Required | string | Investor ID of the investor making the contribution | |\n| payload.amount
Required | string | Amount as a numeral string with two decimal points | |\n| payload.sub_transaction_type
Required | string | Sub transaction type for recurring contribution | `Regular contribution`, `Regular contribution - non relievable`, `Regular contribution - Employer` |\n| payload.currency
Required | string | Currency configured for the pot | |\n| payload.payment_type
Required | string | Type of payment | |\n| payload.service_provider
Required | string | Service provider managing the recurring payment subscription | |\n| payload.purpose
Required | string | Purpose of the recurring contribution | `cash`, `invest` |\n| payload.source_id | string | Only for payments intents for employer contributions made towards SIPP Accumulation Products | |\n| payload.payment_schedule
Required | object | Parameters based on payment schedules | |\n| payload.payment_schedule.interval_unit
Required | string | Repeating interval unit of recurring payment | `monthly` |\n| payload.payment_schedule.interval
Required | number | Repeating interval of recurring payment | |\n| payload.payment_schedule.date | number | Date the payment is expected to be triggered if frequency is monthly | |\n| payload.payment_schedule.start_date
Required | string | Date to initiate the recurring payments | |\n| payload.payment_schedule.end_date | string | Date to conclude the recurring payments, if count is not provided | |\n| payload.payment_schedule.count | number | No of recurring payments to trigger before concluding the payments, if an end date is not provided | |\n| payload.contribution_id
Required | string | System generated unique id | |\n| payload.service_provider_params
Required | object | Parameters based on service provider | |\n| payload.service_provider_params.status
Required | string | Status transitions depend on the service provider | |\n| payload.service_provider_params.reason
Required | string | Reason for disabling/cancelling the contribution | |\n\n##### Examples\n```json\n{\n \"type\": \"recurring_contribution_cancelled\",\n \"ch\": \"notifications\",\n \"payload\": {\n \"status\": \"Cancelled\",\n \"contribution_name\": \"GIA contribution-1\",\n \"pot_id\": \"pot-XWL3805770\",\n \"investor_id\": \"inv-QRY29279\",\n \"amount\": \"1000060.12\",\n \"sub_transaction_type\": \"Regular contribution\",\n \"currency\": \"GBP\",\n \"payment_type\": \"direct_debit\",\n \"service_provider\": \"gocardless\",\n \"purpose\": \"cash\",\n \"payment_schedule\": {\n \"interval_unit\": \"monthly\",\n \"interval\": 7,\n \"date\": 1,\n \"start_date\": \"2024-04-02T00:00:00.000Z\",\n \"end_date\": \"2024-04-03T00:00:00.000Z\"\n },\n \"contribution_id\": \"RCB-GC-JSJ6709\",\n \"service_provider_params\": {\n \"status\": \"Subscription cancelled\",\n \"authorization_reference\" : \"EV0159P7DZB2P6\",\n \"contribution_reference\" : \"BRQ00030E3DXA4P\",\n \"request_id\" : \"BRF00014ZXYN5V4F05M90GZEQCARE84K\",\n \"authorization_url\": \"https://authexample.gocardless-sandbox.com\",\n \"reason\" : \"The mandate for this subscription was cancelled at a bank branch.\"\n }\n },\n \"id\": \"952c7d0a-ecc6-4538-86f4-ad021f6855d0\",\n \"ts\": 1683086449658,\n \"resend\": true\n}\n```\n\n#### Recurring contribution rejection message\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `recurring_contribution_rejected` |\n| ch
Required | string | | `notifications` |\n| payload.status
Required | string | Status of the recurring contribution | |\n| payload.contribution_name
Required | string | User given identifier for the contribution | |\n| payload.pot_id
Required | string | Pot ID of investor to direct the payment | |\n| payload.investor_id
Required | string | Investor ID of the investor making the contribution | |\n| payload.amount
Required | string | Amount as a numeral string with two decimal points | |\n| payload.sub_transaction_type
Required | string | Sub transaction type for recurring contribution | `Regular contribution`, `Regular contribution - non relievable`, `Regular contribution - Employer` |\n| payload.currency
Required | string | Currency configured for the pot | |\n| payload.payment_type
Required | string | Type of payment | |\n| payload.service_provider
Required | string | Service provider managing the recurring payment subscription | |\n| payload.purpose
Required | string | Purpose of the recurring contribution | `cash`, `invest` |\n| payload.source_id | string | Only for payments intents for employer contributions made towards SIPP Accumulation Products | |\n| payload.payment_schedule
Required | object | Parameters based on payment schedules | |\n| payload.payment_schedule.interval_unit
Required | string | Repeating interval unit of recurring payment | `monthly` |\n| payload.payment_schedule.interval
Required | number | Repeating interval of recurring payment | |\n| payload.payment_schedule.date | number | Date the payment is expected to be triggered if frequency is monthly | |\n| payload.payment_schedule.start_date
Required | string | Date to initiate the recurring payments | |\n| payload.payment_schedule.end_date | string | Date to conclude the recurring payments, if count is not provided | |\n| payload.payment_schedule.count | number | No of recurring payments to trigger before concluding the payments, if an end date is not provided | |\n| payload.contribution_id
Required | string | System generated unique id | |\n| payload.service_provider_params
Required | object | Parameters based on service provider | |\n| payload.service_provider_params.status
Required | string | Status transitions depend on the service provider | |\n| payload.service_provider_params.reason
Required | string | Reason for disabling/cancelling the contribution | |\n\n##### Examples\n```json\n{\n \"type\": \"recurring_contribution_rejected\",\n \"ch\": \"notifications\",\n \"payload\": {\n \"status\": \"Rejected\",\n \"contribution_name\": \"GIA contribution-1\",\n \"pot_id\": \"pot-XWL3805770\",\n \"investor_id\": \"inv-QRY29279\",\n \"amount\": \"1000060.12\",\n \"sub_transaction_type\": \"Regular contribution\",\n \"currency\": \"GBP\",\n \"payment_type\": \"direct_debit\",\n \"service_provider\": \"gocardless\",\n \"purpose\": \"cash\",\n \"payment_schedule\": {\n \"interval_unit\": \"monthly\",\n \"interval\": 7,\n \"date\": 1,\n \"start_date\": \"2024-04-02T00:00:00.000Z\",\n \"end_date\": \"2024-04-03T00:00:00.000Z\"\n },\n \"contribution_id\": \"RCB-GC-JSJ6709\",\n \"service_provider_params\": {\n \"status\": \"Pending service provider setup\",\n \"reason\": \"One of your parameters was incorrectly typed\"\n }\n },\n \"id\": \"952c7d0a-ecc6-4538-86f4-ad021f6855d0\",\n \"ts\": 1683086449658,\n \"resend\": true\n}\n```\n\n#### Recurring contribution authorization url received message\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `recurring_contribution_authorization_url_received` |\n| ch
Required | string | | `notifications` |\n| payload.status
Required | string | Status of the recurring contribution | |\n| payload.contribution_name
Required | string | User given identifier for the contribution | |\n| payload.pot_id
Required | string | Pot ID of investor to direct the payment | |\n| payload.investor_id
Required | string | Investor ID of the investor making the contribution | |\n| payload.amount
Required | string | Amount as a numeral string with two decimal points | |\n| payload.sub_transaction_type
Required | string | Sub transaction type for recurring contribution | `Regular contribution`, `Regular contribution - non relievable`, `Regular contribution - Employer` |\n| payload.currency
Required | string | Currency configured for the pot | |\n| payload.payment_type
Required | string | Type of payment | |\n| payload.service_provider
Required | string | Service provider managing the recurring payment subscription | |\n| payload.purpose
Required | string | Purpose of the recurring contribution | `cash`, `invest` |\n| payload.source_id | string | Only for payments intents for employer contributions made towards SIPP Accumulation Products | |\n| payload.payment_schedule
Required | object | Parameters based on payment schedules | |\n| payload.payment_schedule.interval_unit
Required | string | Repeating interval unit of recurring payment | `monthly` |\n| payload.payment_schedule.interval
Required | number | Repeating interval of recurring payment | |\n| payload.payment_schedule.date | number | Date the payment is expected to be triggered if frequency is monthly | |\n| payload.payment_schedule.start_date
Required | string | Date to initiate the recurring payments | |\n| payload.payment_schedule.end_date | string | Date to conclude the recurring payments, if count is not provided | |\n| payload.payment_schedule.count | number | No of recurring payments to trigger before concluding the payments, if an end date is not provided | |\n| payload.contribution_id
Required | string | System generated unique id | |\n| payload.service_provider_params
Required | object | Parameters based on service provider | |\n| payload.service_provider_params.status
Required | string | Status transitions depend on the service provider | |\n| payload.service_provider_params.request_id
Required | string | Request ID used to create a contribution with the service provider | |\n| payload.service_provider_params.authorization_url
Required | string | Authorization URL sent by service provider to setup customer reference data and bank account information | |\n\n##### Examples\n```json\n{\n \"type\": \"recurring_contribution_rejected\",\n \"ch\": \"notifications\",\n \"payload\": {\n \"status\": \"Pending\",\n \"contribution_name\": \"Sanjali SIPP contribution\",\n \"pot_id\": \"pot-XWL3805775\",\n \"investor_id\": \"inv-NNO44399\",\n \"amount\": \"1000\",\n \"sub_transaction_type\": \"Regular contribution\",\n \"currency\": \"GBP\",\n \"payment_type\": \"direct_debit\",\n \"service_provider\": \"gocardless\",\n \"purpose\": \"cash\",\n \"payment_schedule\": {\n \"interval_unit\": \"monthly\",\n \"interval\": 1,\n \"start_date\": \"Thu Jun 01 2023 00:00:00 GMT+0000 (Coordinated Universal Time)\",\n \"date\": 1,\n \"count\": 10\n },\n \"financial_product_id\": \"sipp_accumulation\",\n \"contribution_id\": \"RCB-GC-JDJ4807\",\n \"service_provider_params\": {\n \"status\": \"Pending service provider setup\",\n \"request_id\": \"BRQ0003R0RBM2BK\",\n \"authorization_url\": \"https://pay-sandbox.gocardless.com/billing/static/flow?id=BRF0001BM491H7NWGZ6W2Z5NMVV7GP4T\"\n }\n },\n \"id\": \"852c7d0a-ecc6-4538-86f4-ad021f6855k0\",\n \"ts\": 1684086449658,\n \"resend\": true\n}\n```\n\n#### Recurring contribution resume message\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `recurring_contribution_resumed` |\n| ch
Required | string | | `notifications` |\n| payload.status
Required | string | Status of the recurring contribution | |\n| payload.contribution_name
Required | string | User given identifier for the contribution | |\n| payload.pot_id
Required | string | Pot ID of investor to direct the payment | |\n| payload.investor_id
Required | string | Investor ID of the investor making the contribution | |\n| payload.amount
Required | string | Amount as a numeral string with two decimal points | |\n| payload.sub_transaction_type
Required | string | Sub transaction type for recurring contribution | `Regular contribution`, `Regular contribution - non relievable`, `Regular contribution - Employer` |\n| payload.currency
Required | string | Currency configured for the pot | |\n| payload.payment_type
Required | string | Type of payment | |\n| payload.service_provider
Required | string | Service provider managing the recurring payment subscription | |\n| payload.purpose
Required | string | Purpose of the recurring contribution | `cash`, `invest` |\n| payload.source_id | string | Only for payments intents for employer contributions made towards SIPP Accumulation Products | |\n| payload.payment_schedule
Required | object | Parameters based on payment schedules | |\n| payload.payment_schedule.interval_unit
Required | string | Repeating interval unit of recurring payment | `monthly` |\n| payload.payment_schedule.interval
Required | number | Repeating interval of recurring payment | |\n| payload.payment_schedule.date | number | Date the payment is expected to be triggered if frequency is monthly | |\n| payload.payment_schedule.start_date
Required | string | Date to initiate the recurring payments | |\n| payload.payment_schedule.end_date | string | Date to conclude the recurring payments, if count is not provided | |\n| payload.payment_schedule.count | number | No of recurring payments to trigger before concluding the payments, if an end date is not provided | |\n| payload.contribution_id
Required | string | System generated unique id | |\n| payload.service_provider_params
Required | object | Parameters based on service provider | |\n| payload.service_provider_params.status
Required | string | Status transitions depend on the service provider | |\n| payload.service_provider_params.reason
Required | string | Reason for disabling/cancelling the contribution | |\n\n##### Examples\n```json\n{\n \"type\": \"recurring_contribution_resumed\",\n \"ch\": \"notifications\",\n \"payload\": {\n \"status\": \"Active\",\n \"contribution_name\": \"GIA contribution-1\",\n \"pot_id\": \"pot-XWL3805770\",\n \"investor_id\": \"inv-QRY29279\",\n \"amount\": \"1000060.12\",\n \"sub_transaction_type\": \"Regular contribution\",\n \"currency\": \"GBP\",\n \"payment_type\": \"direct_debit\",\n \"service_provider\": \"gocardless\",\n \"purpose\": \"cash\",\n \"payment_schedule\": {\n \"interval_unit\": \"monthly\",\n \"interval\": 7,\n \"date\": 1,\n \"start_date\": \"2024-04-02T00:00:00.000Z\",\n \"end_date\": \"2024-04-03T00:00:00.000Z\"\n },\n \"contribution_id\": \"RCB-GC-JSJ6709\",\n \"service_provider_params\": {\n \"status\": \"Subscription resumed\",\n \"authorization_reference\" : \"EV0159P7DZB2P6\",\n \"contribution_reference\" : \"BRQ00030E3DXA4P\",\n \"request_id\" : \"BRF00014ZXYN5V4F05M90GZEQCARE84K\",\n \"authorization_url\": \"https://authexample.gocardless-sandbox.com\"\n }\n },\n \"id\": \"952c7d0a-ecc6-4538-86f4-ad021f6855d0\",\n \"ts\": 1683086449658,\n \"resend\": true\n}\n```\n\n#### Recurring contribution completion message\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `recurring_contribution_finished` |\n| ch
Required | string | | `notifications` |\n| payload.status
Required | string | Status of the recurring contribution | |\n| payload.contribution_name
Required | string | User given identifier for the contribution | |\n| payload.pot_id
Required | string | Pot ID of investor to direct the payment | |\n| payload.investor_id
Required | string | Investor ID of the investor making the contribution | |\n| payload.amount
Required | string | Amount as a numeral string with two decimal points | |\n| payload.sub_transaction_type
Required | string | Sub transaction type for recurring contribution | `Regular contribution`, `Regular contribution - non relievable`, `Regular contribution - Employer` |\n| payload.currency
Required | string | Currency configured for the pot | |\n| payload.payment_type
Required | string | Type of payment | |\n| payload.service_provider
Required | string | Service provider managing the recurring payment subscription | |\n| payload.purpose
Required | string | Purpose of the recurring contribution | `cash`, `invest` |\n| payload.source_id | string | Only for payments intents for employer contributions made towards SIPP Accumulation Products | |\n| payload.payment_schedule
Required | object | Parameters based on payment schedules | |\n| payload.payment_schedule.interval_unit
Required | string | Repeating interval unit of recurring payment | `monthly` |\n| payload.payment_schedule.interval
Required | number | Repeating interval of recurring payment | |\n| payload.payment_schedule.date | number | Date the payment is expected to be triggered if frequency is monthly | |\n| payload.payment_schedule.start_date
Required | string | Date to initiate the recurring payments | |\n| payload.payment_schedule.end_date | string | Date to conclude the recurring payments, if count is not provided | |\n| payload.payment_schedule.count | number | No of recurring payments to trigger before concluding the payments, if an end date is not provided | |\n| payload.contribution_id
Required | string | System generated unique id | |\n| payload.service_provider_params
Required | object | Parameters based on service provider | |\n| payload.service_provider_params.status
Required | string | Status transitions depend on the service provider | |\n| payload.service_provider_params.reason
Required | string | Reason for disabling/cancelling the contribution | |\n\n##### Examples\n```json\n{\n \"type\": \"recurring_contribution_finished\",\n \"ch\": \"notifications\",\n \"payload\": {\n \"status\": \"Finished\",\n \"contribution_name\": \"GIA contribution-1\",\n \"pot_id\": \"pot-XWL3805770\",\n \"investor_id\": \"inv-QRY29279\",\n \"amount\": \"1000060.12\",\n \"sub_transaction_type\": \"Regular contribution\",\n \"currency\": \"GBP\",\n \"payment_type\": \"direct_debit\",\n \"service_provider\": \"gocardless\",\n \"purpose\": \"cash\",\n \"payment_schedule\": {\n \"interval_unit\": \"monthly\",\n \"interval\": 7,\n \"date\": 1,\n \"start_date\": \"2024-04-02T00:00:00.000Z\",\n \"end_date\": \"2024-04-03T00:00:00.000Z\"\n },\n \"contribution_id\": \"RCB-GC-JSJ6709\",\n \"service_provider_params\": {\n \"status\": \"Subscription finished\",\n \"authorization_reference\" : \"EV0159P7DZB2P6\",\n \"contribution_reference\" : \"BRQ00030E3DXA4P\",\n \"request_id\" : \"BRF00014ZXYN5V4F05M90GZEQCARE84K\",\n \"authorization_url\": \"https://authexample.gocardless-sandbox.com\",\n \"reason\" : \"The subscription has finished.\"\n }\n },\n \"id\": \"952c7d0a-ecc6-4538-86f4-ad021f6855d0\",\n \"ts\": 1683086449658,\n \"resend\": true\n}\n```\n\n#### Recurring contribution update message\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `recurring_contribution_updated` |\n| ch
Required | string | | `notifications` |\n| payload.status
Required | string | Status of the recurring contribution | |\n| payload.contribution_name
Required | string | User given identifier for the contribution | |\n| payload.pot_id
Required | string | Pot ID of investor to direct the payment | |\n| payload.investor_id
Required | string | Investor ID of the investor making the contribution | |\n| payload.amount
Required | string | Amount as a numeral string with two decimal points | |\n| payload.sub_transaction_type
Required | string | Sub transaction type for recurring contribution | `Regular contribution`, `Regular contribution - non relievable`, `Regular contribution - Employer` |\n| payload.currency
Required | string | Currency configured for the pot | |\n| payload.payment_type
Required | string | Type of payment | |\n| payload.service_provider
Required | string | Service provider managing the recurring payment subscription | |\n| payload.purpose
Required | string | Purpose of the recurring contribution | `cash`, `invest` |\n| payload.source_id | string | Only for payments intents for employer contributions made towards SIPP Accumulation Products | |\n| payload.payment_schedule
Required | object | Parameters based on payment schedules | |\n| payload.payment_schedule.interval_unit
Required | string | Repeating interval unit of recurring payment | `monthly` |\n| payload.payment_schedule.interval
Required | number | Repeating interval of recurring payment | |\n| payload.payment_schedule.date | number | Date the payment is expected to be triggered if frequency is monthly | |\n| payload.payment_schedule.start_date
Required | string | Date to initiate the recurring payments | |\n| payload.payment_schedule.end_date | string | Date to conclude the recurring payments, if count is not provided | |\n| payload.payment_schedule.count | number | No of recurring payments to trigger before concluding the payments, if an end date is not provided | |\n| payload.contribution_id
Required | string | System generated unique id | |\n| payload.service_provider_params
Required | object | Parameters based on service provider | |\n| payload.service_provider_params.status
Required | string | Status transitions depend on the service provider | |\n| payload.service_provider_params.reason
Required | string | Reason for disabling/cancelling the contribution | |\n\n##### Examples\n```json\n{\n \"type\": \"recurring_contribution_updated\",\n \"ch\": \"notifications\",\n \"payload\": {\n \"status\": \"Active\",\n \"contribution_name\": \"GIA contribution-1\",\n \"pot_id\": \"pot-XWL3805770\",\n \"investor_id\": \"inv-QRY29279\",\n \"amount\": \"1000060.12\",\n \"sub_transaction_type\": \"Regular contribution\",\n \"currency\": \"GBP\",\n \"payment_type\": \"direct_debit\",\n \"service_provider\": \"gocardless\",\n \"purpose\": \"cash\",\n \"payment_schedule\": {\n \"interval_unit\": \"monthly\",\n \"interval\": 7,\n \"date\": 1,\n \"start_date\": \"2024-04-02T00:00:00.000Z\",\n \"end_date\": \"2024-04-03T00:00:00.000Z\"\n },\n \"contribution_id\": \"RCB-GC-JSJ6709\",\n \"service_provider_params\": {\n \"status\": \"Mandate replaced\",\n \"authorization_reference\" : \"EV1059P8HGJ6P6\",\n \"contribution_reference\" : \"BRQ00030E3DXA4P\",\n \"request_id\" : \"BRF00014ZXYN5V4F05M90GZEQCARE84K\",\n \"authorization_url\": \"https://authexample.gocardless-sandbox.com\"\n }\n },\n \"id\": \"952c7d0a-ecc6-4538-86f4-ad021f6855d0\",\n \"ts\": 1683086449658,\n \"resend\": true\n}\n```\n\n#### HMRC LISA investor creation failed message\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `HMRC_LISA_investor_creation_failed` |\n| ch
Required | string | | `notifications` |\n| payload.investor_id
Required | string | Investor id of the investor account | |\n| payload.account_id
Required | string | Account id of the investor account | |\n| payload.hmrc_data
Required | object | HMRC related data | |\n| payload.hmrc_data.status
Required | string | Indicate the status of the LISA investor and investor account creation with HMRC | |\n| payload.hmrc_data.reason
Required | string | Reason for failure | |\n\n##### Examples\n```json\n{\n \"type\": \"HMRC_LISA_investor_creation_failed\",\n \"ch\": \"notifications\",\n \"payload\": {\n \"investor_id\": \"inv-QRY29279\",\n \"account_id\": \"LISAC1699158978930\",\n \"hmrc_data\": {\n \"status\": \"hmrc_investor_creation_failed\",\n \"reason\": \"The HMRC request contains invalid or missing data\"\n }\n },\n \"id\": \"952c7d0a-ecc6-4538-86f4-ad021f6855d0\",\n \"ts\": 1683086449658,\n \"resend\": true\n}\n```\n\n#### HMRC LISA account creation failed message\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `HMRC_LISA_account_creation_failed` |\n| ch
Required | string | | `notifications` |\n| payload.investor_id
Required | string | Investor id of the investor account | |\n| payload.account_id
Required | string | Account id of the investor account | |\n| payload.hmrc_data
Required | object | HMRC related data | |\n| payload.hmrc_data.status
Required | string | Indicate the status of the LISA investor and investor account creation with HMRC | |\n| payload.hmrc_data.reason
Required | string | Reason for failure | |\n\n##### Examples\n```json\n{\n \"type\": \"HMRC_LISA_account_creation_failed\",\n \"ch\": \"notifications\",\n \"payload\": {\n \"investor_id\": \"inv-QRY29279\",\n \"account_id\": \"LISAC1699158978930\",\n \"hmrc_data\": {\n \"status\": \"hmrc_account_creation_failed\",\n \"reason\": \"The HMRC request contains invalid or missing data\"\n }\n },\n \"id\": \"952c7d0a-ecc6-4538-86f4-ad021f6855d0\",\n \"ts\": 1683086449658,\n \"resend\": true\n}\n```\n\n#### HMRC LISA account creation successful message\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `HMRC_LISA_account_creation_successful` |\n| ch
Required | string | | `notifications` |\n| payload.investor_id
Required | string | Investor id of the investor account | |\n| payload.account_id
Required | string | Account id of the investor account | |\n| payload.hmrc_data
Required | object | HMRC related data | |\n| payload.hmrc_data.status
Required | string | Indicate the status of the LISA investor and investor account creation with HMRC | |\n| payload.hmrc_data.lisa_investor_reference
Required | object | HMRC LISA investor reference | |\n\n##### Examples\n```json\n{\n \"type\": \"HMRC_LISA_account_creation_successful\",\n \"ch\": \"notifications\",\n \"payload\": {\n \"investor_id\": \"inv-QRY29279\",\n \"account_id\": \"LISAC1699158978930\",\n \"hmrc_data\": {\n \"status\": \"hmrc_account_creation_successful\",\n \"lisa_investor_reference\": \"5305636328\" \n }\n },\n \"id\": \"952c7d0a-ecc6-4538-86f4-ad021f6855d0\",\n \"ts\": 1683086449658,\n \"resend\": true\n}\n```", "url": "https://raw.githubusercontent.com/jentic/jentic-public-apis/refs/heads/main/apis/openapi/wealthos.com/main/v1/apis.json", "tags": [ "wealthos.com", "main" ], "created": "2026-04-01", "modified": "2026-04-01", "specificationVersion": "0.19", "access": "3rd-Party", "maintainers": [ { "FN": "Jentic", "X-github": "jentic", "url": "https://github.com/jentic" } ], "apis": [ { "aid": "wealthos.com:main-v1", "name": "WealthOS API", "description": "Welcome to WealthOS. Here you will find the comprehensive set of information you need to rapidly build rich digital wealth management features. \n# Getting Started\nBefore you start developing your features using the WealthOS API, please make sure that the following steps are complete:\n\n* Set-up your own environment unique to your organisation using the link we have provided\n* Follow the step-by-step [guide](https://wos-gb.sandbox.wealthos.cloud/admin/documentation) to configuring your environment\n* Sign-up and obtain keys for sandbox environments of all 3rd party integrations you require from the market place of available integrations in WealthOS\n* Setup the keys of the 3rd party integrations within the WealthOS Admin UI\n\nOnce you have set yourself up, you can add other users who will be able to collaborate with you.\n\n---\n# WealthOS API Basics\nThe 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. \n\nYour API URLs will be in the following formats:\n\n**RESTful API** - https://{unique_tenancy_identifier}.sandbox.wealthos.cloud/tenant/{endpoint}/v1\n\n``` E.g. https://acorn-gb.sandbox.wealthos.cloud/investors/v1```\n\n**Websocket API** - wss://{unique_tenancy_identifier}-ws.sandbox.wealthos.cloud/ws/\n\n``` E.g. wss://acorn-gb-ws.sandbox.wealthos.cloud/ws/```\n\nThe Websocket API is used by WealthOS to push asynchronous notifications to your application.\n\n---\n# Authentication\nThe 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. \n\n## Testing your keys\nYou may test your keys by calling on the following endpoints. \n\n### RESTful API\nTo test the **secret key**: Perform a GET call on ```~/tenant/test/hello-world-be```\n\n### Socket API\n In order to authenticate a Websocket API call, a query parameter x-token must be included within the URL. \n\nx-token = your organisation’s secret key \n\nFull URL must read as follows: \n````\nwss://{unique_tenancy_identifier}-ws.sandbox.wealthos.cloud/ws?x-token=\n````\n---\n# Idempotency\nSome 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.\n\n#### Sample response\n\n```json\n\n{\n \"status\": 400,\n \"body\": {\n \"message\" : \"duplicate request\", \n \"status\" : \"COMPLETE|PROCESSING\", \n \"response\" : \"\"\n }\n}\n\n```\nThe `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.\n\n---\n# Entity Versioning\nWealthOS 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. \n\nWhen 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.\n\nWith each sucessful update done to the entity via the API the system will increment the `reference_version`. \n\n---\n# Limits\n\nCurrently there are limits to the number of requests that can be made to the WealthOS API. Following are these limits:\n* Average requests per second 500\n* Burst requests 1000\n* Total requests per day 10,000\n\n---\n# FAQ\n\n- **How do I see my API keys and how do I re-new the keys?**\n - 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. \n\n- **Is it mandatory to connect to the web socket**\n - 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.\n\n---\n# Socket API\n## Intro\nWeb socket API is used by the WOS system to notify (push) asynchronous events to the Wealth Manager BE\n## Accessing the Socket api\nYour Socket API URL would be wss://{socket api root}/ws\n\nFor example lets assume your env is `gb` and tenant id is `acorn`. Then,\n\n- Socket API Root: acorn-gb-ws.sandbox.wealthos.cloud\n\n- Socket API URL: wss://acorn-gb-ws.sandbox.wealthos.cloud/ws\n## Authenticating Socket Connection\nWealthOS 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.\n\n`x-token` is the ApiSecretKey given you by the WealthOS system\n\nSo the actual connection URL must look like\n\n```\nwss://acme-gb-ws.sandbox.wealthos.cloud/ws?x-token=\n```\n## Channels\nWealthOS 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.\n\nMessages sent via the channels will be strictly ordered by the event generation time. However, there is no guarantee of ordering messages across channels.\n\nA generic data message passed through the socket looks like,\n\n```json\n{\n type: \"a string tag that identifies the message\"\n resend: \"[optional] Indicates whether this is a resend message. Resends can be sent during explicit recovery servicing or due to server recovering from errors\"\n ch: \"channel name\" \n payload: { \n .... \n }\n id: \"unique id for this message\"\n ts: \"unique sequence number of message\"\n \n}\n``` \n**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.\n## Subscribe\nSent from client to server to subscribe to a channel.\n * Channel name should be specified in the `ch` attribute.\n * Unique request id must be sent in the `req_id` attribute.\n\n```\n{\n \"type\": \"subscription\",\n \"ch\": \"channel to be subscribed\",\n \"req_id\": \"request ID\",\n \"from_ts\": past sequence number / Timestamp value (milliseconds)\n}\n```\nServer 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.\n\n```\n{\n \"type\": \"subscription\",\n \"ch\": \"subscribed channel\",\n \"req_id\": \"request ID\",\n \"status\": \"ACK\"\n}\n```\n\n```\n{\n \"type\": \"subscription\",\n \"ch\": \"subscribed channel\",\n \"req_id\": \"request ID\",\n \"status\": \"NACK\",\n \"reason\": \"Error Message\"\n}\n```\n## Unsubscribe\nSent from client to server to unsubscribe from a channel.\n * Channel name should be specified in the `ch` attribute.\n * Unique request id must be sent in the `req_id` attribute.\n\n```\n{\n \"type\": \"unsubscription\",\n \"ch\": \"channel to be unsubscribed\",\n \"req_id\": \"request ID\"\n}\n```\nServer 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.\n\n```\n{\n \"type\": \"unsubscription\",\n \"ch\": \"channel to be unsubscribed\",\n \"req_id\": \"request ID\",\n \"status\": \"ACK\"\n}\n```\n\n```\n{\n \"type\": \"unsubscription\",\n \"ch\": \"channel to be unsubscribed\",\n \"req_id\": \"request ID\",\n \"status\": \"NACK\",\n \"reason\": \"Error Message\"\n}\n```\n**NOTE**\n* Subscribing to an already subscribed channel will be rejected.\n* Client is expected to re-try, if no response is received within 60 secs\n \n\n## Heart beats\nThe 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\n\n```json\n{\n type: \"hb\",\n ch: \"system\"\n}\n```\n
\n \n

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

\n
\n
\n\n\n## Recover missed updates\nThe ws client can send a **past sequence number** with the subscription to receive missed updates from the provided sequence number onwards.\n\n```json\n{\n \"type\": \"subscription\",\n \"ch\": \"channel to be subscribed\",\n \"req_id\": \"request ID\",\n \"from_ts\": \"past sequence number\"\n}\n```\nServer responds with a **subscribe** message which echoes the request. Then the ws client will receive past socket updates from the provided sequence number onwards.\n\n```\n{\n \"type\": \"subscription\",\n \"ch\": \"subscribed channel\",\n \"req_id\": \"request ID\",\n \"status\": \"ACK\",\n \"from_ts\": 1625660972000\n}\n{\n \"type\": \"investor_status\",\n \"ch\": \"investors\",\n \"payload\": {\n \"investor_id\" : \"\",\n \"status\" : \"'fail' | 'success'\", \n \"error\" : \"\", \n \"event\": \"'kyc.started' | 'kyc.completed'\" \n },\n \"id\": \"fd232671-d47b-4ae2-a4c4-0a37258ffae5\",\n \"ts\": 1625660972222,\n \"resend\": true\n}\n```\n**NOTE**\n* If the provided sequence number equals **-1**, Then the system will send all the past socket updates to the client.\n* System only accepts integer type sequence number values.\n\n## Supported Channels\n\n- investors\n- payments\n- transactions \n- holdings\n- reconciliations\n- notifications\n\n### publish investors\n\nThis channel publishes investor related updates.\n\n#### Message\n\n\nThe investor channel publishes the following message types:\n- `investor_status` : This message type is used to communicate updates to the KYC/AML status of an investor\n\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type | string | message type | `investor_status` |\n| ch | string | channel name | `investors` |\n| payload.investor_id | string | unique Id of investor | |\n| payload.status | string | | `fail` , `success` |\n| payload.error | string | error text. Populated only on failure | |\n| payload.event | string | KYC status. Populated only if request is sucessful | `kyc.started`, `kyc.completed` |\n\n##### Examples\n```json\n{\n \"type\": \"investor_status\",\n \"ch\": \"investors\",\n \"payload\": {\n \"investor_id\" : \"inv-XUT11265\",\n \"status\" : \"success\", \n \"error\" : \"\", \n \"event\": \"kyc.completed\" \n },\n \"id\": \"fd232671-d47b-4ae2-a4c4-0a37258ffae5\",\n \"ts\": 1625660972222\n}\n```\n\n\n\n### publish payments\n\nThis channel publishes payment status related updates\n\n#### Message\n\nThe payments channel publishes the following message types:\n- `payment_update` : This message type is used to communicate updates to the status of the payment.\n\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type | string | | `payment_update` |\n| ch | string | | `payments` |\n| payload.transaction_id | string | Unique Id of the payment | |\n| payload.pot_id | string | Id of the pot the payment is directed to | |\n| payload.reason | string | This field populated only when payment intent status is failed or cancelled, with reason for cancellation or failure | |\n| payload.status | string | | `pending_confirmation`, `processing`, `succeeded`, `cancelled`, `failed` |\n\n##### Examples\n\n```json\n{\n \"type\": \"payment_update\",\n \"ch\": \"payments\",\n \"payload\": {\n \"transaction_id\" : \"80784c92-8f9d-4150-b83c-dc\",\n \"pot_id\" : \"pot-GYQ5423100\",\n \"status\" : \"succeeded\"\n },\n \"id\": \"fd232671-d47b-4ae2-a4c4-0a37258ffae5\",\n \"ts\": 1625660972222\n}\n```\n\n\n\n### publish transactions\n\nThis channel publishes various transaction related updates.\n\n#### Message\n\nThe transactions channel publishes the following message types:\n- `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.)\n- `transaction_updated` : This message type is used to communicate an update to a transaction.\n- `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).\n- `transaction_failed` : This message type is used to notify the user of a transaction failure.\n\n\n##### Payload\nFor 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](https://wos-gb.sandbox.wealthos.cloud/admin/documentation). \n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type | string | | `transaction_updated`,`transaction_initiated`,`external_transaction_added` |\n| ch | string | | `transactions` |\n| payload.transaction_id | string | Unique Id of the transaction | |\n| payload.parent_transaction_id | string | Parent Transaction ID | |\n| payload.external_transaction_reference | string | External Transaction Reference | |\n| payload.pot_id | string | Pot ID of the transaction | |\n| payload.investment_product_id | string | Invetment Prouct ID or cash | |\n| payload.client_order_id | string | (Optional) Order identifier assigned by the wealth manager | |\n| payload.primary_transaction_type | string | Primary Transaction Type | `Fees`,`Buy`,`Sell`,`Transfers`,`Income`,`Tax`,`Contribution`,`Withdrawal`,`Corporate actions` |\n| 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` |\n| payload.type | string | Type of the transaction | `pending`,`archived` |\n| payload.sub_type | string | Sub type of the transaction | `instructed`,`confirmed`,`priced`,`rejected`,`settled`,`cancelled`, `scheduled`, `failed` |\n| payload.currency | string | Currency of the pot | |\n| payload.direction | string | Direction of the transaction | `in`,`out` |\n| payload.transaction_quantity | string | Quantity of the investment product transaction. This will be empty for cash transactions | |\n| payload.transaction_value | string | Value of the transaction | |\n| payload.execution_price | string | Executed price of the buy, sell transaction | |\n| payload.trade_date | date | Will indicate the date where this transaction was effected | |\n| payload.settlement_date | date | Intendent settlement date of the pending transaction or actual the settled day of the transaction | |\n| payload.created_at | time | Transaction created date | |\n| payload.updated_at | time | Transaction last updated date | |\n| payload.additional_external_details | Object | Additional external details of the transaction, This may be populated in reconciliation process | |\n| payload.origin | string | Origin of the transaction | `api`, `admin_ui`, `file_upload`, `system` | \n| payload.source_id | string | transactions created for payments intents - employer contributions for SIPP Accumulation Products | | \n| payload.reason | string | This field populated only when status is failed or canceled, with reason for cancellation or failure | | \n##### Examples\n\n```json\n{\n \"type\": \"transaction_updated\",\n \"ch\": \"transactions\",\n \"object\": {\n \"pot_id\":\"pot-GYQ5423100\",\n \"transaction_id\":\"80784c92-8f9d-4150-b83c-dc\",\n \"investment_product_id\":\"GB0000495209\",\n \"primary_transaction_type\":\"Buy\",\n \"sub_transaction_type\":\"Buy\",\n \"type\":\"archived\",\n \"sub_type\":\"settled\",\n \"currency\":\"GBP\",\n \"direction\":\"in\",\n \"transaction_quantity\":\"20\",\n \"transaction_value\":\"129.69\",\n \"execution_price\":\"6.45\",\n \"trade_date\":\"2021-08-06\",\n \"settlement_date\":\"2021-08-06\",\n \"origin\": \"admin_ui\",\n \"source_id\": \"cem-ASP43560\",\n \"created_at\":\"2021-08-06T09:25:44.251Z\",\n \"updated_at\":\"2021-08-06T09:27:18.003Z\",\n \"external_transaction_reference\": \"117709248888833\"\n },\n \"id\":\"8e754ef9-5d63-4c2a-9f43-ac42f588e122\",\n \"ts\":1628244517263\n}\n```\n\n\n### publish holdings\n\nThis channel publishes holdings related updates.\n\n#### Message\n\nThe holdings channel publishes the following message types:\n- `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.\n\n##### Payload\nFor 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](https://wos-gb.sandbox.wealthos.cloud/admin/documentation). \n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type | string | | `holding_updated` |\n| ch | string | | `holdings` | \n| payload.pot_id | string | Id of the pot the payment is directed to | |\n| payload.investment_product_id | string | Investment product ID or 'cash' for cash | |\n| payload.currency | string | Currency of the pot | |\n| payload.total_quantity | string | Total Quantity of the investment product holding. This value is empty for cash holdings | |\n| payload.free_quantity | string | Free Quantity of the investment product holding. This value is empty for cash holdings | |\n| payload.locked_quantity | string | Locked Quantity of the investment product holding. This value is empty for cash holdings | |\n| payload.total_value | string | Total Value of the holding | |\n| payload.free_value | string | Free Value of the holding | |\n| payload.locked_value | string | Locked Value of the holding | |\n| payload.investment_product_name | string | Name of the investment product | |\n| payload.price | string | Price of the holding | |\n| payload.price_date | time | The time which the price is updated | |\n| payload.average_book_cost | string | Per-unit book cost for a particular holding (applicable for investment product holdings only) | |\n| payload.cost_of_holding | string | Total book cost for the total units currently held within the pot (applicable for investment product holdings only) | |\n| payload.settled_cash_position | string | Settled cash amount within the pot (applicable for cash holdings only) | |\n| payload.additional_external_details | Object | Additional external details of the holding, This may be populated in reconciliation process | |\n\n##### Examples\n\n```json\n{\n \"type\": \"holding_updated\",\n \"ch\": \"holdings\",\n \"payload\": {\n \"pot_id\":\"pot-GYQ5423100\",\n \"investment_product_id\":\"GB0000495209\",\n \"currency\":\"GBP\",\n \"total_quantity\":\"20\",\n \"free_quantity\":\"20\",\n \"locked_quantity\":\"0\",\n \"total_value\":\"137.358\",\n \"free_value\":\"137.358\",\n \"locked_value\":\"0\",\n \"investment_product_name\":\"BlackRock European Dynamic Fund A Accumulation\",\n \"price\":\"6.8679\",\n \"price_date\":\"2021-08-06T09:27:37.512Z\",\n \"average_book_cost\": \"5\",\n \"cost_of_holding\": \"100\" \n },\n \"id\":\"8e754ef9-5d63-4c2a-9f43-ac42f588e122\",\n \"ts\":1628244517263\n}\n```\n\n \n\n### publish reconciliations\n\nThe reconciliations channel publishes the following message types:\n- `investor_summary` : This message type is used to communicate a summary of investor reconciliation process.\n- `investor_mismatch` : This message type is used to communicate all mismatches in each investor reconciliations process.\n- `pot_summary` : This message type is used to communicate a summary of pot reconciliation process.\n- `pot_mismatch` : This message type is used to communicate all mismatches in each pot reconciliations process.\n- `transaction_summary` : This message type is used to communicate a summary of transaction reconciliation process.\n- `transaction_mismatch` : This message type is used to communicate mismatches in each transaction reconciliations process.\n- `transaction_ingestion_failure` : This message type is used to communicate ingestion failures in each transaction reconciliations process.\n- `transaction_ignored` : This message type is used to communicate all ignored transactions in each transaction reconciliations process.\n- `holdings_summary` : This message type is used to communicate a summary of holding reconciliation process.\n- `holdings_mismatch` : This message type is used to communicate all mismatches in each holding reconciliations process.\n\n#### Investor summary message\n##### Payload\n\t\t\t\n\n| Name | Type | Description | Accepted values |\n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `investor_summary` |\n| ch
Required | string | | `reconciliations` |\n| payload.job_id
Required | string | Unique Id of reconciliation process | |\n| payload.job_name
Required | string | type of reconciliations | |\n| payload.date
Required | string | date and time | |\n| payload.total_records
Required | number | total record count | |\n| payload.mismatched_records
Required | number | mismatched record count | |\n| payload.incoming_records
Required | number | incoming record count | |\n| payload.no_incoming_records
Required | number | no incoming record count | |\n\n\n##### Examples\n\n```json\n{\n \"type\":\"investor_summary\",\n \"ch\":\"reconciliations\",\n \"payload\":\n {\n \"job_id\":\"hydrangea-dc-210806-1628240463777\",\n \"job_name\":\"Investor Details\",\n \"date\":\"2021-08-09T06:49:34.227Z\",\n \"total_records\":1,\n \"mismatched_records\":1,\n \"incoming_records\": 0,\n \"no_incoming_records\": 0\n },\n \"id\":\"e1c7797f-f590-4490-a452-01894b33d014\",\n \"ts\":1628244517823\n}\n\n```\n\n#### Investor mismatch message\n##### Payload\n\n| Name | Type | Description | Accepted values |\n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `investor_mismatch` |\n| ch
Required | string | | `reconciliations` |\n| payload.job_id
Required | string | Unique Id of reconciliation process | |\n| payload.date
Required | string | date and time | |\n| payload.record_id
Required | string | unique id of a record | |\n| payload.investor_id | string | unique id of the investor being reconciled (if available) | |\n| payload.record_status
Required | string | record status | `reconciled`, `unreconciled`, `not_found`, `key_unavailable` |\n| payload.fields | object | mismatched fields with field, incoming_value, available_value and status | |\n| payload.fields.field
Required | string | Name of the fields | |\n| payload.fields.incoming_value | string | Incoming value for the field | |\n| payload.fields.available_value | string | Available value for the field | |\n| payload.fields.status | string | status of the field | `mismatched`, `matched` |\n\n##### Examples\n\n```json\n{\n \"type\":\"investor_mismatch\",\n \"ch\":\"reconciliations\",\n \"payload\":\n {\n \"job_id\":\"hydrangea-dc-210806-1628240463777\",\n \"date\":\"2021-08-09T06:49:34.227Z\",\n \"record_id\":\"F180010Q\",\n \"record_status\":\"not_found\",\n \"fields\":\n [\n {\"field\":\"first_name\",\"incoming_value\":\"David\",\"available_value\": \"Dane\", \"status\":\"mismatched\"},\n {\"field\":\"last_name\",\"incoming_value\":\"Brown\", \"available_value\": \"Black\", \"status\":\"mismatched\"}\n ]\n },\n \"id\":\"8e754ef9-5d63-4c2a-9f43-ac42f588e122\",\n \"ts\":1628244517263\n}\n\n```\n\n#### Pot summary message\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `pot_summary` |\n| ch
Required | string | | `reconciliations` |\n| payload.job_id
Required | string | Unique Id of reconciliation process | |\n| payload.job_name
Required | string | type of reconciliations | |\n| payload.date
Required | string | date and time | |\n| payload.total_records
Required | number | total record count | |\n| payload.mismatched_records
Required | number | mismatched record count | |\n| payload.incoming_records
Required | number | incoming record count | |\n| payload.no_incoming_records
Required | number | no incoming record count | |\n\n##### Examples\n\n```json\n{\n \"type\": \"pot_summary\",\n \"ch\": \"reconciliations\",\n \"payload\": {\n \"job_id\": \"dev14_recon_pot_200\",\n \"job_name\": \"Pot Details\",\n \"date\": \"2021-09-02T10:07:40.578Z\",\n \"total_records\": 91,\n \"mismatched_records\": 41,\n \"incoming_records\": 0,\n \"no_incoming_records\": 0\n },\n \"id\": \"c574d276-de4b-4014-80f3-80e54d31d3da\",\n \"ts\": 1630577304480\n}\n```\n\n#### Pot mismatch message\n##### Payload\n\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `pot_mismatch` |\n| ch
Required | string | | `reconciliations` |\n| payload.job_id
Required | string | Unique Id of reconciliation process | |\n| payload.date
Required | string | date and time | |\n| payload.record_id
Required | string | unique id of a record | |\n| payload.pot_id | string | unique id of the pot being reconciled (if available) | |\n| payload.record_status
Required | string | record status | `reconciled`, `unreconciled`, `not_found`, `key_unavailable` |\n| payload.fields | object | mismatched fields | |\n| payload.fields.field
Required | string | Name of the fields | |\n| payload.fields.incoming_value | string | Incoming value for the field | |\n| payload.fields.available_value | string | Available value for the field | |\n| payload.fields.status | string | status of the field | `matched`, `mismatched` |\n\n##### Examples\n\n```json\n{\n \"type\": \"pot_mismatch\",\n \"ch\": \"reconciliations\",\n \"payload\": {\n \"job_id\": \"dev14_recon_pot_200\",\n \"date\": \"2021-09-02T10:07:40.578Z\",\n \"record_id\": \"53_RWM\",\n \"record_status\": \"not_found\",\n \"fields\": [\n {\"field\": \"custodian_account_reference\",\"incoming_value\": \"F3A0023Q\",\"status\": \"mismatched\"},\n {\"field\": \"pot_currency\",\"incoming_value\": \"GBP\",\"status\": \"mismatched\"}\n \n ]\n },\n \"id\": \"7722f072-4e8d-48ec-ad4f-4543e64fb536\",\n \"ts\": 1630577304156\n}\n```\n\n#### Transaction summary message\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `transaction_summary` |\n| ch
Required | string | | `reconciliations` |\n| payload.job_id
Required | string | Unique Id of reconciliation process | |\n| payload.job_name
Required | string | Name of the reconciliations job | |\n| payload.date
Required | string | date and time | |\n| payload.total_records
Required | number | total record count | |\n| payload.mismatched_records
Required | number | mismatched record count | |\n| payload.updated_records
Required | number | updated record count | |\n| payload.unable_to_ingest
Required | number | ingestion failed record count | |\n| payload.ignored_records
Required | number | ignored record count | |\n| payload.incoming_records
Required | number | incoming record count | |\n| payload.no_incoming_records
Required | number | no incoming record count | |\n\n\n##### Examples\n\n```json\n{\n \"type\": \"transaction_summary\",\n \"ch\": \"reconciliations\",\n \"payload\": {\n \"job_id\": \"dev10_cat_inv_178\",\n \"job_name\": \"Transaction Details\",\n \"date\": \"2021-08-18T09:08:27.171Z\",\n \"total_records\": 8,\n \"mismatched_records\": 1,\n \"updated_records\": 4,\n \"unable_to_ingest\": 1,\n \"ignored_records\": 1,\n \"incoming_records\": 7,\n \"no_incoming_records\": 1\n },\n \"id\": \"7d3614c7-3f63-4930-88df-062c5059047d\",\n \"ts\": 1629277726128\n}\n```\n\n#### Transaction mismatch message\n##### Payload\n\n| Name | Type | Description | Accepted values |\n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `transaction_mismatch` |\n| ch
Required | string | | `reconciliations` |\n| payload.job_id
Required | string | Unique Id of reconciliation process | |\n| payload.date
Required | string | date and time | |\n| payload.record_id
Required | string | unique id of a record | |\n| payload.external_transaction_reference | string | External transaction reference (if available) | |\n| payload.transaction_ids | object | Transaction ids of mismatched records (if available) | |\n| payload.pot_id | string | Pot ID of the transaction (if available) | |\n| payload.record_status
Required | string | record status | `unreconciled`,`not_found`,`key_unavailable`, `multiple_found`, `no_incoming_record`, `updated` |\n| payload.fields | object | mismatched fields | |\n| payload.fields.field
Required | string | Name of the fields | |\n| payload.fields.incoming_value | string | Incoming value for the field | |\n| payload.fields.available_value | string | Available value for the field | |\n| payload.fields.status | string | status of the field | `matched`, `mismatched`, `key_value_missing` |\n\n##### Examples\n\n```json\n{\n\t\"type\":\"transaction_mismatch\",\n\t\"ch\":\"reconciliations\",\n\t\"payload\":{\"job_id\":\"peony-transaction_reconciliations-1630493472846\",\n\t\"date\":\"2021-09-01T10:51:18.577Z\",\n\t\"record_id\":\"2_RWM\",\n\t\"external_transaction_reference\":\"117709248888833\",\n \"transaction_ids\": [ \"80784c92-8f9d-4150-b83c-dc\" ],\n\t\"pot_id\":\"pot-GYQ5423100\",\n\t\"record_status\":\"unreconciled\",\n\t\"fields\":[\n\t{\n\t\t\"field\":\"primary_transaction_type\",\n\t\t\"incoming_value\":\"Buy\",\n\t\t\"available_value\":\"Corporate actions\",\n\t\t\"status\":\"mismatched\"\n\t},\n\t{\n\t\t\"field\":\"sub_transaction_type\",\n\t\t\"incoming_value\":\"Buy\",\n\t\t\"available_value\":\"Stock Split\",\n\t\t\"status\":\"mismatched\"\n },\n\t{\n\t\t\"field\":\"execution_price\",\n\t\t\"incoming_value\":null,\n\t\t\"status\":\"mismatched\"\n },\n\t{\n\t\t\"field\":\"trade_date\",\n\t\t\"incoming_value\":\"2021-08-31\",\n\t\t\"status\":\"mismatched\"\n\t},\n\t{\n\t\t\"field\":\"settlement_date\",\n\t\t\"incoming_value\":\"2021-09-02\",\n\t\t\"status\":\"mismatched\"\n\t}\n\t]\n},\n\t\"id\":\"0b3aa3b1-b14c-44ee-ac47-656149645ba9\",\n\t\"ts\":1630493491292\n}\n```\n\n#### Transaction ingestion failure message\n##### Payload\n\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `transaction_ingestion_failure` |\n| ch
Required | string | | `reconciliations` |\n| payload.job_id
Required | string | Unique Id of reconciliation process | |\n| payload.date
Required | string | date and time | |\n| payload.record_id
Required | string | unique id of a record | |\n| payload.external_transaction_reference | string | External transaction reference | |\n| payload.pot_id | string | Pot ID of the transaction (if available) | |\n| payload.record_status
Required | string | record status | `unable_to_ingest` |\n| payload.fields
Required | object | fields | |\n| payload.fields.field
Required | string | Name of the fields | |\n| payload.fields.incoming_value
Required | string | Incoming value for the field | |\n| payload.fields.status
Required | string | status of the field | `unrecognised`, `key_value_missing` |\n\n##### Examples\n\n```json\n{\n \"type\": \"transaction_ingestion_failure\",\n \"ch\": \"reconciliations\",\n \"payload\": {\n \"job_id\": \"peony-transaction_reconciliations-1630657432163\",\n \"date\": \"2021-09-03T08:23:54.373Z\",\n \"record_id\": \"3_RWM\",\n \"external_transaction_reference\": \"331738147053699\",\n \"record_status\": \"unable_to_ingest\",\n \"fields\": [\n {\n \"field\": \"custodian_account_reference\",\n \"incoming_value\": \"F3A0000A\",\n \"status\": \"unrecognised\"\n },\n {\n \"field\": \"pot_currency\",\n \"incoming_value\": \"GBP\",\n \"status\": \"unrecognised\"\n },\n {\n \"field\": \"investment_product_id\",\n \"incoming_value\": \"CA1358251\",\n \"status\": \"unrecognised\"\n }\n ]\n },\n \"id\": \"718f9758-e2b0-4a07-9cc6-8a6cb5aae419\",\n \"ts\": 1630657439928\n}\n```\n\n#### Transaction ignored failure message\n##### Payload\n\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `transaction_ignored` |\n| ch
Required | string | | `reconciliations` |\n| payload.job_id
Required | string | Unique Id of reconciliation process | |\n| payload.date
Required | string | date and time | |\n| payload.record_id
Required | string | unique id of a record | |\n| payload.record_status
Required | string | record status | `ignored` |\n\n##### Examples\n\n```json\n{\n \"type\": \"transaction_ignored\",\n \"ch\": \"reconciliations\",\n \"payload\": {\n \"job_id\": \"peony-transaction_reconciliations-1630657867836\",\n \"date\": \"2021-09-03T08:31:08.191Z\",\n \"record_id\": \"3_RWM\",\n \"record_status\": \"ignored\"\n },\n \"id\": \"8a82df6b-d34a-4eb9-91a1-b98cd18aa4e2\",\n \"ts\": 1630657913417\n} \n```\n#### Holding summary message\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `holdings_summary` |\n| ch
Required | string | | `reconciliations` |\n| payload.job_id
Required | string | Unique Id of reconciliation process | |\n| payload.job_name
Required | string | type of reconciliations | |\n| payload.date
Required | string | date and time | |\n| payload.total_records
Required | number | total record count | |\n| payload.mismatched_records
Required | number | mismatched record count | |\n| payload.incoming_records
Required | number | incoming record count | |\n| payload.no_incoming_records
Required | number | no incoming record count | |\n\n##### Examples\n\n```json\n{\n \"type\":\"holdings_summary\",\n \"ch\":\"reconciliations\",\n \"payload\":\n {\n \"job_id\":\"cat-holding_reconciliations-1631619829926\",\n \"job_name\":\"Holdings Details\",\n \"date\":\"2021-08-09T06:49:34.227Z\",\n \"total_records\":10,\n \"mismatched_records\":5,\n \"incoming_records\": 0,\n \"no_incoming_records\": 0\n },\n \"id\":\"e1c7797f-f590-4490-a452-01894b33d014\",\n \"ts\":1628244517823\n}\n\n```\n\n#### Holding mismatch message\n##### Payload\n\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `holding_mismatch` |\n| ch
Required | string | | `reconciliations` |\n| payload.job_id
Required | string | Unique Id of reconciliation process | |\n| payload.date
Required | string | date and time | |\n| payload.record_id
Required | string | unique id of a record | |\n| payload.pot_id | string | unique id of the pot being reconciled (if available) | |\n| payload.investment_product_id | string | unique id of the investment product being reconciled (if available) | |\n| payload.record_status
Required | string | record status | `reconciled`, `unreconciled`, `not_found`, `key_unavailable` |\n| payload.fields | object | mismatched fields with field, incoming_value, available_value and status | |\n| payload.fields.field
Required | string | Name of the fields | |\n| payload.fields.incoming_value | string | Incoming value for the field | |\n| payload.fields.available_value | string | Available value for the field | |\n| payload.fields.status | string | status of the field | `mismatched`, `matched`, `updated` |\n\n##### Examples\n\n```json\n{\n \"type\":\"holding_mismatch\",\n \"ch\":\"reconciliations\",\n \"payload\":\n {\n \"job_id\":\"cat-holding_reconciliations-1631619829926\",\n \"date\":\"2021-08-09T06:49:34.227Z\",\n \"record_id\":\"RWM_9_sr\",\n \"pot_id\": \"pot-GYQ5423100\",\n \"investment_product_id\": \"pqr\",\n \"record_status\":\"not_found\",\n \"fields\":\n [\n {\"field\":\"custodian_account_reference\",\"incoming_value\":\"F180010Q\",\"status\":\"mismatched\"},\n {\"field\":\"free_value\",\"incoming_value\":0, \"status\":\"mismatched\"}\n ]\n },\n \"id\":\"8e754ef9-5d63-4c2a-9f43-ac42f588e122\",\n \"ts\":1628244517263\n}\n\n```\n\n \n\n### publish notifications\n\nThis channel publishes general notifications.\n\n#### Message\n\n\nThe notifications channel publishes the following message types:\n- `recurring_contribution_activated` : This message type is used to communicate activation of recurring contribution requests\n- `recurring_contribution_cancelled` : This message type is used to communicate cancellation of recurring contribution requests\n- `recurring_contribution_rejected` : This message type is used to communicate rejection of recurring contribution requests\n- `recurring_contribution_authorization_url_received` : This message type is used to communicate that the authorization url is received for the recurring contribution\n- `recurring_contribution_resumed` : This message type is used to communicate resuming of recurring contribution requests\n- `recurring_contribution_finished` : This message type is used to communicate completion of recurring contribution requests\n- `recurring_contribution_updated` : This message type is used to communicate updates (mandate transferr, mandate replacement) of recurring contribution requests\n- `HMRC_LISA_investor_creation_failed` : This message type is used to communicate rejection of HMRC LISA investor creation requests\n- `HMRC_LISA_account_creation_failed` : This message type is used to communicate rejection of HMRC LISA investor account creation requests\n- `HMRC_LISA_account_creation_successful` : This message type is used to communicate completion of HMRC LISA investor and account creation requests\n\n#### Recurring contribution activation message\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `recurring_contribution_activated` |\n| ch
Required | string | | `notifications` |\n| payload.status
Required | string | Status of the recurring contribution | |\n| payload.contribution_name
Required | string | User given identifier for the contribution | |\n| payload.pot_id
Required | string | Pot ID of investor to direct the payment | |\n| payload.investor_id
Required | string | Investor ID of the investor making the contribution | |\n| payload.amount
Required | string | Amount as a numeral string with two decimal points | |\n| payload.sub_transaction_type
Required | string | Sub transaction type for recurring contribution | `Regular contribution`, `Regular contribution - non relievable`, `Regular contribution - Employer` |\n| payload.currency
Required | string | Currency configured for the pot | |\n| payload.payment_type
Required | string | Type of payment | |\n| payload.service_provider
Required | string | Service provider managing the recurring payment subscription | |\n| payload.purpose
Required | string | Purpose of the recurring contribution | `cash`, `invest` |\n| payload.source_id | string | Only for payments intents for employer contributions made towards SIPP Accumulation Products | |\n| payload.payment_schedule
Required | object | Parameters based on payment schedules | |\n| payload.payment_schedule.interval_unit
Required | string | Repeating interval unit of recurring payment | `monthly` |\n| payload.payment_schedule.interval
Required | number | Repeating interval of recurring payment | |\n| payload.payment_schedule.date | number | Date the payment is expected to be triggered if frequency is monthly | |\n| payload.payment_schedule.start_date
Required | string | Date to initiate the recurring payments | |\n| payload.payment_schedule.end_date | string | Date to conclude the recurring payments, if count is not provided | |\n| payload.payment_schedule.count | number | No of recurring payments to trigger before concluding the payments, if an end date is not provided | |\n| payload.contribution_id
Required | string | System generated unique id | |\n| payload.service_provider_params
Required | object | Parameters based on service provider | |\n| payload.service_provider_params.status
Required | string | Status transitions depend on the service provider | |\n| payload.service_provider_params.reason
Required | string | Reason for disabling/cancelling the contribution | |\n\n##### Examples\n```json\n{\n \"type\": \"recurring_contribution_activated\",\n \"ch\": \"notifications\",\n \"payload\": {\n \"status\": \"Active\",\n \"contribution_name\": \"GIA contribution-1\",\n \"pot_id\": \"pot-XWL3805770\",\n \"investor_id\": \"inv-QRY29279\",\n \"amount\": \"1000060.12\",\n \"sub_transaction_type\": \"Regular contribution\",\n \"currency\": \"GBP\",\n \"payment_type\": \"direct_debit\",\n \"service_provider\": \"gocardless\",\n \"purpose\": \"cash\",\n \"payment_schedule\": {\n \"interval_unit\": \"monthly\",\n \"interval\": 7,\n \"date\": 1,\n \"start_date\": \"2024-04-02T00:00:00.000Z\",\n \"end_date\": \"2024-04-03T00:00:00.000Z\"\n },\n \"contribution_id\": \"RCB-GC-JSJ6709\",\n \"service_provider_params\": {\n \"status\": \"Subscription created\",\n \"authorization_reference\" : \"EV0159P7DZB2P6\",\n \"contribution_reference\" : \"BRQ00030E3DXA4P\",\n \"request_id\" : \"BRF00014ZXYN5V4F05M90GZEQCARE84K\",\n \"authorization_url\": \"https://authexample.gocardless-sandbox.com\"\n }\n },\n \"id\": \"952c7d0a-ecc6-4538-86f4-ad021f6855d0\",\n \"ts\": 1683086449658,\n \"resend\": true\n}\n```\n\n#### Recurring contribution cancellation message\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `recurring_contribution_cancelled` |\n| ch
Required | string | | `notifications` |\n| payload.status
Required | string | Status of the recurring contribution | |\n| payload.contribution_name
Required | string | User given identifier for the contribution | |\n| payload.pot_id
Required | string | Pot ID of investor to direct the payment | |\n| payload.investor_id
Required | string | Investor ID of the investor making the contribution | |\n| payload.amount
Required | string | Amount as a numeral string with two decimal points | |\n| payload.sub_transaction_type
Required | string | Sub transaction type for recurring contribution | `Regular contribution`, `Regular contribution - non relievable`, `Regular contribution - Employer` |\n| payload.currency
Required | string | Currency configured for the pot | |\n| payload.payment_type
Required | string | Type of payment | |\n| payload.service_provider
Required | string | Service provider managing the recurring payment subscription | |\n| payload.purpose
Required | string | Purpose of the recurring contribution | `cash`, `invest` |\n| payload.source_id | string | Only for payments intents for employer contributions made towards SIPP Accumulation Products | |\n| payload.payment_schedule
Required | object | Parameters based on payment schedules | |\n| payload.payment_schedule.interval_unit
Required | string | Repeating interval unit of recurring payment | `monthly` |\n| payload.payment_schedule.interval
Required | number | Repeating interval of recurring payment | |\n| payload.payment_schedule.date | number | Date the payment is expected to be triggered if frequency is monthly | |\n| payload.payment_schedule.start_date
Required | string | Date to initiate the recurring payments | |\n| payload.payment_schedule.end_date | string | Date to conclude the recurring payments, if count is not provided | |\n| payload.payment_schedule.count | number | No of recurring payments to trigger before concluding the payments, if an end date is not provided | |\n| payload.contribution_id
Required | string | System generated unique id | |\n| payload.service_provider_params
Required | object | Parameters based on service provider | |\n| payload.service_provider_params.status
Required | string | Status transitions depend on the service provider | |\n| payload.service_provider_params.reason
Required | string | Reason for disabling/cancelling the contribution | |\n\n##### Examples\n```json\n{\n \"type\": \"recurring_contribution_cancelled\",\n \"ch\": \"notifications\",\n \"payload\": {\n \"status\": \"Cancelled\",\n \"contribution_name\": \"GIA contribution-1\",\n \"pot_id\": \"pot-XWL3805770\",\n \"investor_id\": \"inv-QRY29279\",\n \"amount\": \"1000060.12\",\n \"sub_transaction_type\": \"Regular contribution\",\n \"currency\": \"GBP\",\n \"payment_type\": \"direct_debit\",\n \"service_provider\": \"gocardless\",\n \"purpose\": \"cash\",\n \"payment_schedule\": {\n \"interval_unit\": \"monthly\",\n \"interval\": 7,\n \"date\": 1,\n \"start_date\": \"2024-04-02T00:00:00.000Z\",\n \"end_date\": \"2024-04-03T00:00:00.000Z\"\n },\n \"contribution_id\": \"RCB-GC-JSJ6709\",\n \"service_provider_params\": {\n \"status\": \"Subscription cancelled\",\n \"authorization_reference\" : \"EV0159P7DZB2P6\",\n \"contribution_reference\" : \"BRQ00030E3DXA4P\",\n \"request_id\" : \"BRF00014ZXYN5V4F05M90GZEQCARE84K\",\n \"authorization_url\": \"https://authexample.gocardless-sandbox.com\",\n \"reason\" : \"The mandate for this subscription was cancelled at a bank branch.\"\n }\n },\n \"id\": \"952c7d0a-ecc6-4538-86f4-ad021f6855d0\",\n \"ts\": 1683086449658,\n \"resend\": true\n}\n```\n\n#### Recurring contribution rejection message\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `recurring_contribution_rejected` |\n| ch
Required | string | | `notifications` |\n| payload.status
Required | string | Status of the recurring contribution | |\n| payload.contribution_name
Required | string | User given identifier for the contribution | |\n| payload.pot_id
Required | string | Pot ID of investor to direct the payment | |\n| payload.investor_id
Required | string | Investor ID of the investor making the contribution | |\n| payload.amount
Required | string | Amount as a numeral string with two decimal points | |\n| payload.sub_transaction_type
Required | string | Sub transaction type for recurring contribution | `Regular contribution`, `Regular contribution - non relievable`, `Regular contribution - Employer` |\n| payload.currency
Required | string | Currency configured for the pot | |\n| payload.payment_type
Required | string | Type of payment | |\n| payload.service_provider
Required | string | Service provider managing the recurring payment subscription | |\n| payload.purpose
Required | string | Purpose of the recurring contribution | `cash`, `invest` |\n| payload.source_id | string | Only for payments intents for employer contributions made towards SIPP Accumulation Products | |\n| payload.payment_schedule
Required | object | Parameters based on payment schedules | |\n| payload.payment_schedule.interval_unit
Required | string | Repeating interval unit of recurring payment | `monthly` |\n| payload.payment_schedule.interval
Required | number | Repeating interval of recurring payment | |\n| payload.payment_schedule.date | number | Date the payment is expected to be triggered if frequency is monthly | |\n| payload.payment_schedule.start_date
Required | string | Date to initiate the recurring payments | |\n| payload.payment_schedule.end_date | string | Date to conclude the recurring payments, if count is not provided | |\n| payload.payment_schedule.count | number | No of recurring payments to trigger before concluding the payments, if an end date is not provided | |\n| payload.contribution_id
Required | string | System generated unique id | |\n| payload.service_provider_params
Required | object | Parameters based on service provider | |\n| payload.service_provider_params.status
Required | string | Status transitions depend on the service provider | |\n| payload.service_provider_params.reason
Required | string | Reason for disabling/cancelling the contribution | |\n\n##### Examples\n```json\n{\n \"type\": \"recurring_contribution_rejected\",\n \"ch\": \"notifications\",\n \"payload\": {\n \"status\": \"Rejected\",\n \"contribution_name\": \"GIA contribution-1\",\n \"pot_id\": \"pot-XWL3805770\",\n \"investor_id\": \"inv-QRY29279\",\n \"amount\": \"1000060.12\",\n \"sub_transaction_type\": \"Regular contribution\",\n \"currency\": \"GBP\",\n \"payment_type\": \"direct_debit\",\n \"service_provider\": \"gocardless\",\n \"purpose\": \"cash\",\n \"payment_schedule\": {\n \"interval_unit\": \"monthly\",\n \"interval\": 7,\n \"date\": 1,\n \"start_date\": \"2024-04-02T00:00:00.000Z\",\n \"end_date\": \"2024-04-03T00:00:00.000Z\"\n },\n \"contribution_id\": \"RCB-GC-JSJ6709\",\n \"service_provider_params\": {\n \"status\": \"Pending service provider setup\",\n \"reason\": \"One of your parameters was incorrectly typed\"\n }\n },\n \"id\": \"952c7d0a-ecc6-4538-86f4-ad021f6855d0\",\n \"ts\": 1683086449658,\n \"resend\": true\n}\n```\n\n#### Recurring contribution authorization url received message\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `recurring_contribution_authorization_url_received` |\n| ch
Required | string | | `notifications` |\n| payload.status
Required | string | Status of the recurring contribution | |\n| payload.contribution_name
Required | string | User given identifier for the contribution | |\n| payload.pot_id
Required | string | Pot ID of investor to direct the payment | |\n| payload.investor_id
Required | string | Investor ID of the investor making the contribution | |\n| payload.amount
Required | string | Amount as a numeral string with two decimal points | |\n| payload.sub_transaction_type
Required | string | Sub transaction type for recurring contribution | `Regular contribution`, `Regular contribution - non relievable`, `Regular contribution - Employer` |\n| payload.currency
Required | string | Currency configured for the pot | |\n| payload.payment_type
Required | string | Type of payment | |\n| payload.service_provider
Required | string | Service provider managing the recurring payment subscription | |\n| payload.purpose
Required | string | Purpose of the recurring contribution | `cash`, `invest` |\n| payload.source_id | string | Only for payments intents for employer contributions made towards SIPP Accumulation Products | |\n| payload.payment_schedule
Required | object | Parameters based on payment schedules | |\n| payload.payment_schedule.interval_unit
Required | string | Repeating interval unit of recurring payment | `monthly` |\n| payload.payment_schedule.interval
Required | number | Repeating interval of recurring payment | |\n| payload.payment_schedule.date | number | Date the payment is expected to be triggered if frequency is monthly | |\n| payload.payment_schedule.start_date
Required | string | Date to initiate the recurring payments | |\n| payload.payment_schedule.end_date | string | Date to conclude the recurring payments, if count is not provided | |\n| payload.payment_schedule.count | number | No of recurring payments to trigger before concluding the payments, if an end date is not provided | |\n| payload.contribution_id
Required | string | System generated unique id | |\n| payload.service_provider_params
Required | object | Parameters based on service provider | |\n| payload.service_provider_params.status
Required | string | Status transitions depend on the service provider | |\n| payload.service_provider_params.request_id
Required | string | Request ID used to create a contribution with the service provider | |\n| payload.service_provider_params.authorization_url
Required | string | Authorization URL sent by service provider to setup customer reference data and bank account information | |\n\n##### Examples\n```json\n{\n \"type\": \"recurring_contribution_rejected\",\n \"ch\": \"notifications\",\n \"payload\": {\n \"status\": \"Pending\",\n \"contribution_name\": \"Sanjali SIPP contribution\",\n \"pot_id\": \"pot-XWL3805775\",\n \"investor_id\": \"inv-NNO44399\",\n \"amount\": \"1000\",\n \"sub_transaction_type\": \"Regular contribution\",\n \"currency\": \"GBP\",\n \"payment_type\": \"direct_debit\",\n \"service_provider\": \"gocardless\",\n \"purpose\": \"cash\",\n \"payment_schedule\": {\n \"interval_unit\": \"monthly\",\n \"interval\": 1,\n \"start_date\": \"Thu Jun 01 2023 00:00:00 GMT+0000 (Coordinated Universal Time)\",\n \"date\": 1,\n \"count\": 10\n },\n \"financial_product_id\": \"sipp_accumulation\",\n \"contribution_id\": \"RCB-GC-JDJ4807\",\n \"service_provider_params\": {\n \"status\": \"Pending service provider setup\",\n \"request_id\": \"BRQ0003R0RBM2BK\",\n \"authorization_url\": \"https://pay-sandbox.gocardless.com/billing/static/flow?id=BRF0001BM491H7NWGZ6W2Z5NMVV7GP4T\"\n }\n },\n \"id\": \"852c7d0a-ecc6-4538-86f4-ad021f6855k0\",\n \"ts\": 1684086449658,\n \"resend\": true\n}\n```\n\n#### Recurring contribution resume message\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `recurring_contribution_resumed` |\n| ch
Required | string | | `notifications` |\n| payload.status
Required | string | Status of the recurring contribution | |\n| payload.contribution_name
Required | string | User given identifier for the contribution | |\n| payload.pot_id
Required | string | Pot ID of investor to direct the payment | |\n| payload.investor_id
Required | string | Investor ID of the investor making the contribution | |\n| payload.amount
Required | string | Amount as a numeral string with two decimal points | |\n| payload.sub_transaction_type
Required | string | Sub transaction type for recurring contribution | `Regular contribution`, `Regular contribution - non relievable`, `Regular contribution - Employer` |\n| payload.currency
Required | string | Currency configured for the pot | |\n| payload.payment_type
Required | string | Type of payment | |\n| payload.service_provider
Required | string | Service provider managing the recurring payment subscription | |\n| payload.purpose
Required | string | Purpose of the recurring contribution | `cash`, `invest` |\n| payload.source_id | string | Only for payments intents for employer contributions made towards SIPP Accumulation Products | |\n| payload.payment_schedule
Required | object | Parameters based on payment schedules | |\n| payload.payment_schedule.interval_unit
Required | string | Repeating interval unit of recurring payment | `monthly` |\n| payload.payment_schedule.interval
Required | number | Repeating interval of recurring payment | |\n| payload.payment_schedule.date | number | Date the payment is expected to be triggered if frequency is monthly | |\n| payload.payment_schedule.start_date
Required | string | Date to initiate the recurring payments | |\n| payload.payment_schedule.end_date | string | Date to conclude the recurring payments, if count is not provided | |\n| payload.payment_schedule.count | number | No of recurring payments to trigger before concluding the payments, if an end date is not provided | |\n| payload.contribution_id
Required | string | System generated unique id | |\n| payload.service_provider_params
Required | object | Parameters based on service provider | |\n| payload.service_provider_params.status
Required | string | Status transitions depend on the service provider | |\n| payload.service_provider_params.reason
Required | string | Reason for disabling/cancelling the contribution | |\n\n##### Examples\n```json\n{\n \"type\": \"recurring_contribution_resumed\",\n \"ch\": \"notifications\",\n \"payload\": {\n \"status\": \"Active\",\n \"contribution_name\": \"GIA contribution-1\",\n \"pot_id\": \"pot-XWL3805770\",\n \"investor_id\": \"inv-QRY29279\",\n \"amount\": \"1000060.12\",\n \"sub_transaction_type\": \"Regular contribution\",\n \"currency\": \"GBP\",\n \"payment_type\": \"direct_debit\",\n \"service_provider\": \"gocardless\",\n \"purpose\": \"cash\",\n \"payment_schedule\": {\n \"interval_unit\": \"monthly\",\n \"interval\": 7,\n \"date\": 1,\n \"start_date\": \"2024-04-02T00:00:00.000Z\",\n \"end_date\": \"2024-04-03T00:00:00.000Z\"\n },\n \"contribution_id\": \"RCB-GC-JSJ6709\",\n \"service_provider_params\": {\n \"status\": \"Subscription resumed\",\n \"authorization_reference\" : \"EV0159P7DZB2P6\",\n \"contribution_reference\" : \"BRQ00030E3DXA4P\",\n \"request_id\" : \"BRF00014ZXYN5V4F05M90GZEQCARE84K\",\n \"authorization_url\": \"https://authexample.gocardless-sandbox.com\"\n }\n },\n \"id\": \"952c7d0a-ecc6-4538-86f4-ad021f6855d0\",\n \"ts\": 1683086449658,\n \"resend\": true\n}\n```\n\n#### Recurring contribution completion message\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `recurring_contribution_finished` |\n| ch
Required | string | | `notifications` |\n| payload.status
Required | string | Status of the recurring contribution | |\n| payload.contribution_name
Required | string | User given identifier for the contribution | |\n| payload.pot_id
Required | string | Pot ID of investor to direct the payment | |\n| payload.investor_id
Required | string | Investor ID of the investor making the contribution | |\n| payload.amount
Required | string | Amount as a numeral string with two decimal points | |\n| payload.sub_transaction_type
Required | string | Sub transaction type for recurring contribution | `Regular contribution`, `Regular contribution - non relievable`, `Regular contribution - Employer` |\n| payload.currency
Required | string | Currency configured for the pot | |\n| payload.payment_type
Required | string | Type of payment | |\n| payload.service_provider
Required | string | Service provider managing the recurring payment subscription | |\n| payload.purpose
Required | string | Purpose of the recurring contribution | `cash`, `invest` |\n| payload.source_id | string | Only for payments intents for employer contributions made towards SIPP Accumulation Products | |\n| payload.payment_schedule
Required | object | Parameters based on payment schedules | |\n| payload.payment_schedule.interval_unit
Required | string | Repeating interval unit of recurring payment | `monthly` |\n| payload.payment_schedule.interval
Required | number | Repeating interval of recurring payment | |\n| payload.payment_schedule.date | number | Date the payment is expected to be triggered if frequency is monthly | |\n| payload.payment_schedule.start_date
Required | string | Date to initiate the recurring payments | |\n| payload.payment_schedule.end_date | string | Date to conclude the recurring payments, if count is not provided | |\n| payload.payment_schedule.count | number | No of recurring payments to trigger before concluding the payments, if an end date is not provided | |\n| payload.contribution_id
Required | string | System generated unique id | |\n| payload.service_provider_params
Required | object | Parameters based on service provider | |\n| payload.service_provider_params.status
Required | string | Status transitions depend on the service provider | |\n| payload.service_provider_params.reason
Required | string | Reason for disabling/cancelling the contribution | |\n\n##### Examples\n```json\n{\n \"type\": \"recurring_contribution_finished\",\n \"ch\": \"notifications\",\n \"payload\": {\n \"status\": \"Finished\",\n \"contribution_name\": \"GIA contribution-1\",\n \"pot_id\": \"pot-XWL3805770\",\n \"investor_id\": \"inv-QRY29279\",\n \"amount\": \"1000060.12\",\n \"sub_transaction_type\": \"Regular contribution\",\n \"currency\": \"GBP\",\n \"payment_type\": \"direct_debit\",\n \"service_provider\": \"gocardless\",\n \"purpose\": \"cash\",\n \"payment_schedule\": {\n \"interval_unit\": \"monthly\",\n \"interval\": 7,\n \"date\": 1,\n \"start_date\": \"2024-04-02T00:00:00.000Z\",\n \"end_date\": \"2024-04-03T00:00:00.000Z\"\n },\n \"contribution_id\": \"RCB-GC-JSJ6709\",\n \"service_provider_params\": {\n \"status\": \"Subscription finished\",\n \"authorization_reference\" : \"EV0159P7DZB2P6\",\n \"contribution_reference\" : \"BRQ00030E3DXA4P\",\n \"request_id\" : \"BRF00014ZXYN5V4F05M90GZEQCARE84K\",\n \"authorization_url\": \"https://authexample.gocardless-sandbox.com\",\n \"reason\" : \"The subscription has finished.\"\n }\n },\n \"id\": \"952c7d0a-ecc6-4538-86f4-ad021f6855d0\",\n \"ts\": 1683086449658,\n \"resend\": true\n}\n```\n\n#### Recurring contribution update message\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `recurring_contribution_updated` |\n| ch
Required | string | | `notifications` |\n| payload.status
Required | string | Status of the recurring contribution | |\n| payload.contribution_name
Required | string | User given identifier for the contribution | |\n| payload.pot_id
Required | string | Pot ID of investor to direct the payment | |\n| payload.investor_id
Required | string | Investor ID of the investor making the contribution | |\n| payload.amount
Required | string | Amount as a numeral string with two decimal points | |\n| payload.sub_transaction_type
Required | string | Sub transaction type for recurring contribution | `Regular contribution`, `Regular contribution - non relievable`, `Regular contribution - Employer` |\n| payload.currency
Required | string | Currency configured for the pot | |\n| payload.payment_type
Required | string | Type of payment | |\n| payload.service_provider
Required | string | Service provider managing the recurring payment subscription | |\n| payload.purpose
Required | string | Purpose of the recurring contribution | `cash`, `invest` |\n| payload.source_id | string | Only for payments intents for employer contributions made towards SIPP Accumulation Products | |\n| payload.payment_schedule
Required | object | Parameters based on payment schedules | |\n| payload.payment_schedule.interval_unit
Required | string | Repeating interval unit of recurring payment | `monthly` |\n| payload.payment_schedule.interval
Required | number | Repeating interval of recurring payment | |\n| payload.payment_schedule.date | number | Date the payment is expected to be triggered if frequency is monthly | |\n| payload.payment_schedule.start_date
Required | string | Date to initiate the recurring payments | |\n| payload.payment_schedule.end_date | string | Date to conclude the recurring payments, if count is not provided | |\n| payload.payment_schedule.count | number | No of recurring payments to trigger before concluding the payments, if an end date is not provided | |\n| payload.contribution_id
Required | string | System generated unique id | |\n| payload.service_provider_params
Required | object | Parameters based on service provider | |\n| payload.service_provider_params.status
Required | string | Status transitions depend on the service provider | |\n| payload.service_provider_params.reason
Required | string | Reason for disabling/cancelling the contribution | |\n\n##### Examples\n```json\n{\n \"type\": \"recurring_contribution_updated\",\n \"ch\": \"notifications\",\n \"payload\": {\n \"status\": \"Active\",\n \"contribution_name\": \"GIA contribution-1\",\n \"pot_id\": \"pot-XWL3805770\",\n \"investor_id\": \"inv-QRY29279\",\n \"amount\": \"1000060.12\",\n \"sub_transaction_type\": \"Regular contribution\",\n \"currency\": \"GBP\",\n \"payment_type\": \"direct_debit\",\n \"service_provider\": \"gocardless\",\n \"purpose\": \"cash\",\n \"payment_schedule\": {\n \"interval_unit\": \"monthly\",\n \"interval\": 7,\n \"date\": 1,\n \"start_date\": \"2024-04-02T00:00:00.000Z\",\n \"end_date\": \"2024-04-03T00:00:00.000Z\"\n },\n \"contribution_id\": \"RCB-GC-JSJ6709\",\n \"service_provider_params\": {\n \"status\": \"Mandate replaced\",\n \"authorization_reference\" : \"EV1059P8HGJ6P6\",\n \"contribution_reference\" : \"BRQ00030E3DXA4P\",\n \"request_id\" : \"BRF00014ZXYN5V4F05M90GZEQCARE84K\",\n \"authorization_url\": \"https://authexample.gocardless-sandbox.com\"\n }\n },\n \"id\": \"952c7d0a-ecc6-4538-86f4-ad021f6855d0\",\n \"ts\": 1683086449658,\n \"resend\": true\n}\n```\n\n#### HMRC LISA investor creation failed message\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `HMRC_LISA_investor_creation_failed` |\n| ch
Required | string | | `notifications` |\n| payload.investor_id
Required | string | Investor id of the investor account | |\n| payload.account_id
Required | string | Account id of the investor account | |\n| payload.hmrc_data
Required | object | HMRC related data | |\n| payload.hmrc_data.status
Required | string | Indicate the status of the LISA investor and investor account creation with HMRC | |\n| payload.hmrc_data.reason
Required | string | Reason for failure | |\n\n##### Examples\n```json\n{\n \"type\": \"HMRC_LISA_investor_creation_failed\",\n \"ch\": \"notifications\",\n \"payload\": {\n \"investor_id\": \"inv-QRY29279\",\n \"account_id\": \"LISAC1699158978930\",\n \"hmrc_data\": {\n \"status\": \"hmrc_investor_creation_failed\",\n \"reason\": \"The HMRC request contains invalid or missing data\"\n }\n },\n \"id\": \"952c7d0a-ecc6-4538-86f4-ad021f6855d0\",\n \"ts\": 1683086449658,\n \"resend\": true\n}\n```\n\n#### HMRC LISA account creation failed message\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `HMRC_LISA_account_creation_failed` |\n| ch
Required | string | | `notifications` |\n| payload.investor_id
Required | string | Investor id of the investor account | |\n| payload.account_id
Required | string | Account id of the investor account | |\n| payload.hmrc_data
Required | object | HMRC related data | |\n| payload.hmrc_data.status
Required | string | Indicate the status of the LISA investor and investor account creation with HMRC | |\n| payload.hmrc_data.reason
Required | string | Reason for failure | |\n\n##### Examples\n```json\n{\n \"type\": \"HMRC_LISA_account_creation_failed\",\n \"ch\": \"notifications\",\n \"payload\": {\n \"investor_id\": \"inv-QRY29279\",\n \"account_id\": \"LISAC1699158978930\",\n \"hmrc_data\": {\n \"status\": \"hmrc_account_creation_failed\",\n \"reason\": \"The HMRC request contains invalid or missing data\"\n }\n },\n \"id\": \"952c7d0a-ecc6-4538-86f4-ad021f6855d0\",\n \"ts\": 1683086449658,\n \"resend\": true\n}\n```\n\n#### HMRC LISA account creation successful message\n##### Payload\n\t\t\t\n| Name | Type | Description | Accepted values | \n| ----------- | ----------- | ----------- | ----------- |\n| type
Required | string | | `HMRC_LISA_account_creation_successful` |\n| ch
Required | string | | `notifications` |\n| payload.investor_id
Required | string | Investor id of the investor account | |\n| payload.account_id
Required | string | Account id of the investor account | |\n| payload.hmrc_data
Required | object | HMRC related data | |\n| payload.hmrc_data.status
Required | string | Indicate the status of the LISA investor and investor account creation with HMRC | |\n| payload.hmrc_data.lisa_investor_reference
Required | object | HMRC LISA investor reference | |\n\n##### Examples\n```json\n{\n \"type\": \"HMRC_LISA_account_creation_successful\",\n \"ch\": \"notifications\",\n \"payload\": {\n \"investor_id\": \"inv-QRY29279\",\n \"account_id\": \"LISAC1699158978930\",\n \"hmrc_data\": {\n \"status\": \"hmrc_account_creation_successful\",\n \"lisa_investor_reference\": \"5305636328\" \n }\n },\n \"id\": \"952c7d0a-ecc6-4538-86f4-ad021f6855d0\",\n \"ts\": 1683086449658,\n \"resend\": true\n}\n```", "image": "data:image/svg+xml;base64,PHN2ZyBzdHlsZT0ibWF4LXdpZHRoOiAyMjBweDsgbWFyZ2luOiBhdXRvIiB2aWV3Qm94PSIwIDAgMTQwIDQwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yNS4wMzEgMzIuNzgyN0wxOC4wMzQgMjguNjYwMlYxOC43NDU0TDMxLjg1ODEgMjYuOTAzN1YyOC43NTg0TDI1LjAzMSAzMi43ODI3Wk0yLjExMjU1IDIxLjEzODVIMTEuOTkxNUwxNS45MzY3IDE4LjgxNDdWMzYuODg5NUwyLjExMjU1IDI4Ljc1MDlWMjEuMTM4NVpNMTguMDQ1MyAzMS4xNDRMMjIuOTI4MSAzNC4wMjIyTDE4LjA0MTMgMzYuODg5NUwxOC4wNDUzIDMxLjE0NFpNMTEuNjkxMiA1LjYwMjg5VjEwLjQxMzlMNy45Mjk1NSAxMi42MzcxVjE1LjExODZMMTMuNzkyNCAxMS42NDgyVjQuMzYxNTlMMTYuOTg2NSAyLjQ4MzE4TDIwLjE4MzkgNC4zNjUwNVYxMS42NTM0TDI2LjA0NjIgMTUuMTI0M1YxMi42MzcxTDIyLjI4NjggMTAuNDEzOVY1LjYwNTJMMzEuODY1NSAxMS4yNDUxVjE4Ljk5MjFIMjIuNjU5NkwxNy4wNTA1IDE1LjY4TDExLjQyNDQgMTguOTkyMUgyLjEwOTE1VjExLjI0NTFMMTEuNjkxMiA1LjYwMjg5Wk0zMS44NjU1IDI0LjQxOTlMMjYuMzA0IDIxLjE0MjVIMzEuODY1NVYyNC40MTk5Wk0xNi45ODY1IDBMMCAxMC4wMDE0VjMwLjAwMDNMMTYuOTg2NSA0MEwzMy45NzQxIDMwLjAwMDNWMTAuMDAxNEwxNi45ODY1IDBaIiBmaWxsPSIjMzcwMEIzIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTcuOTQ0NzYgMjYuOTY5MkwxMC4wNTE2IDI4LjIwODhWMjQuMDQ3Nkg3Ljk0NDc2VjI2Ljk2OTJaIiBmaWxsPSIjMzcwMEIzIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTUwLjk4MSAyMi45OTE0TDQ2Ljc0MTIgMjAuMzgyM0w0Mi41MDMxIDIyLjk5MTRWMTUuNDI1Mkg0MC4zNTQ5VjI2Ljg3MDdMNDYuNzQxMiAyMi45NDExTDUzLjEyOTMgMjYuODcwN1YxNS40MjUySDUwLjk4MVYyMi45OTE0WiIgZmlsbD0iIzM3MDBCMyI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik03NC41NjMyIDIwLjA1NDdINjkuMjk4Nkw3MS45MzQ2IDE3LjA5MzNMNzQuNTYzMiAyMC4wNTQ3Wk03My40Mjg1IDE1LjQxMzZINzAuNDQwN0w3MC40ODQzIDE1LjQ2MTVMNjYuNTAzNCAxOS45MzY5VjI2Ljg3ODFINjguNjUxNlYyMi4yNTA4SDc1LjIxNzVWMjYuODc4MUg3Ny4zNjhWMTkuOTM2OUw3My4zOTYyIDE1LjQ2MTVMNzMuNDI4NSAxNS40MTM2WiIgZmlsbD0iIzM3MDBCMyI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMDguNTkgMjAuMDU0OEgxMDIuMDI0VjE1LjQyOTJIOTkuODczOFYyNi44NzA2SDEwMi4wMjRWMjIuMjQ1MUgxMDguNTlWMjYuODcwNkgxMTAuNzRWMTUuNDI5MkgxMDguNTlWMjAuMDU0OFoiIGZpbGw9IiMzNzAwQjMiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTI1LjU0NiAyMi41MjI5TDEyMy40ODggMjQuNjIwOEgxMjAuNjJMMTE4LjU2MiAyMi41MjI5VjE5LjcxNzRMMTIwLjYyIDE3LjYxOTVIMTIzLjQ5MUwxMjUuNTQ4IDE5LjcxNzRMMTI1LjU0NiAyMi41MjI5Wk0xMTkuNzI3IDE1LjQyOTJMMTE2LjQxMiAxOC44MDk0VjIzLjQzNjdMMTE5LjcyNyAyNi44MTY5SDEyNC4zNzlMMTI3LjY5NCAyMy40MzY3VjE4LjgwOTRMMTI0LjM3OSAxNS40MjkySDExOS43MjdaIiBmaWxsPSIjMzcwMEIzIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTU1LjI2MDYgMjYuODcwOUg2NC4zNTMyVjI0LjY4MDVINTcuNDEwNlYyMi4yNDUzSDYxLjg0NThWMjAuMDU1SDU3LjQxMDZWMTcuNjE5Mkg2NC4zNTMyVjE1LjQyODhINTUuMjYwNlYyNi44NzA5WiIgZmlsbD0iIzM3MDBCMyI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04Ni40NDE1IDE3LjYxOTRIOTEuMDM4OFYyNi44NzExSDkzLjE4ODhWMTcuNjE5NEg5Ny43MjU0VjE1LjQyOTFIODYuNDQxNVYxNy42MTk0WiIgZmlsbD0iIzM3MDBCMyI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04MS42NDc0IDE1LjQxMTlINzkuNDk5MlYyNi44NzA2SDg2LjQxM1YyNC42ODAzSDgxLjY0NzRWMTUuNDExOVoiIGZpbGw9IiMzNzAwQjMiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTM2LjY3OSAyMC4wNDUySDEzMy4xNDVDMTMyLjQ5NCAyMC4wNDUyIDEzMS45NjYgMTkuNTA3NCAxMzEuOTY2IDE4Ljg0MzdDMTMxLjk2NiAxOC4xOCAxMzIuNDk0IDE3LjY0MjMgMTMzLjE0NSAxNy42NDIzSDEzNy44NFYxNS40Mjg4SDEzMy4xNDlDMTMxLjMwNCAxNS40MyAxMjkuODA5IDE2Ljk1NTUgMTI5LjgxMSAxOC44MzYyQzEyOS44MTIgMjAuNzE1MiAxMzEuMzA2IDIyLjIzODQgMTMzLjE0OSAyMi4yMzk1SDEzNi42ODFDMTM3LjMyOCAyMi4yNDM2IDEzNy44NTEgMjIuNzgwMiAxMzcuODUxIDIzLjQ0MDRWMjMuNDZDMTM3Ljg1MiAyNC4xMjE0IDEzNy4zMjggMjQuNjU5MiAxMzYuNjc5IDI0LjY2MDlIMTI5Ljg1MlYyNi44NjUxSDEzNi42NzlDMTM4LjUxNyAyNi44NTc2IDE0MC4wMDMgMjUuMzM0NCAxNDAgMjMuNDZWMjMuNDQwNEMxMzkuOTk4IDIxLjU3MDEgMTM4LjUxMyAyMC4wNTI3IDEzNi42NzkgMjAuMDQ1MloiIGZpbGw9IiMzNzAwQjMiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+", "baseURL": "https://web_host_name", "humanURL": "https://github.com/jentic/jentic-public-apis/tree/main/apis/openapi/wealthos.com/main/v1", "version": "v1", "tags": [ "wealthos.com", "main" ], "properties": [ { "type": "OpenAPI", "name": "OpenAPI definition", "url": "https://raw.githubusercontent.com/jentic/jentic-public-apis/refs/heads/main/apis/openapi/wealthos.com/main/v1/openapi.json", "mediaType": "application/openapi+json" }, { "type": "GitHubRepo", "url": "https://github.com/jentic/jentic-public-apis/tree/main/apis/openapi/wealthos.com/main/v1" } ] } ] }