Download OpenAPI specification:Download
This is Tumelo's API. It drives increased shareholder engagement by providing transparency of the organizations owned by investors and giving them a voice by allowing them to vote on important issues at these organizations.
The main uses of this API are:
This API is currently available as a closed BETA. We invite interested parties to give us feedback on this API, its documentation, or anything else about Tumelo's transparency service prior to the API becoming generally available.
A changelog for the api can be found here.
The API is available at the following URL:
https://api.prod.tumelo.com/v1
For information on how to obtain access to the API, please contact us.
Development and Production environments are separated into their own habitats. Please contact us when you're ready to go into production and require access to your company's live habitat.
URLs, headers, path parameters, query parameter names, and query parameter values are all case sensitive. Be careful to use the correct case when constructing requests.
Requests may return an error indicating that there was a problem responding. The response will contain an HTTP status code as well as a JSON object in the following format which describes the error in more detail:
{
"message": "Resource not found"
}
Requests that return lists and describe pagination parameters support paginated results. Results are separated into multiple pages, where the size of each page is determined by the pageSize
query parameter. If omitted, pageSize
defaults to 50 records. When a response includes a nextPageToken
in the response body, this token value should be passed as a query parameter nextPageToken
to the same endpoint in order to retrieve the next page of results. This process should be repeated until the response doesn’t include a nextPageToken
, indicating that the end of the results has been reached.
When passing the nextPageToken
parameter, all other filter and query parameters present in the previous request, must be filled. Filter parameters must not be changed while paginating since this will result in an error or an incorrect overall list. The nextPageToken
will not be present in the response body if the end of the list has been reached and no further results are available.
The following string formats are used throughout this API.
The valid format is date-time notation as defined by RFC 3339, section 5.6.
For example: 2020-11-30T10:45:28Z
If you have any technical questions relating to the Tumelo API, please contact us, explaining your question or issue in as much detail as possible, including the operation you were performing and the ISIN or Organization ID you were querying, as well as the results you expected and the actual results or error message you observed. You can expect a response within one business day.
During development and testing in your development habitat we make available a test data set that includes some sample data constructed to illustrate functionality. It is not intended to be used for any purpose other than testing and/or demonstrating functionality, and should not be relied upon to be an accurate reflection of the underlying holdings of any real fund.
If you have any questions or concerns about the data accuracy or completeness of the data in the production environment, please report the matter to us, giving as much information as possible about the issue.
An instrument may have a composition, this means it is a fund invested in other instruments.
A breakdown is the bottom level components of a composite instrument or account. By this, we mean organizations and cash that a particular composite instrument or account is invested into either directly or through funds.
Breakdowns also have an other
listing, this is for funds that only have partial information available, or where an instrument is not mapped to an organization.
All requests to the Tumelo API must be authenticated using an access token.
You will be given a username
, password
and habitatId
to access the API. To obtain an access token, call the authenticate
endpoint and provide these details. A token will be returned which can be used to access the API for a particular amount of time. When the access token expires you will need to call the endpoint again to acquire a new token.
If you wish to change your password for security purposes you can use the changePassword
endpoint to do so.
Advanced Usage
Amazon's AWS Cognito Identity Provider Service is the identity provider responsible for issuing the token(s).
If you wish you can communicate with AWS Cognito directly. You obtain API access tokens by authenticating with Cognito using the credentials issued to your company by Tumelo. You then use the IdToken
issued by Cognito in each subsequent request to the Tumelo API.
This process of authenticating directly with cognito is described in detail in the Authentication Developer Guide.
This is the only request which can be made without an access token.
Acquires an access token which the API user can use to authenticate with the API.
This token should be used in an Authorization
header in subsequent requests using the format Bearer <token>
.
The token has a limited validity, typically 1 hour.
username required | string The username of the API user |
password required | string The password of the API user |
{- "username": "string",
- "password": "string"
}
{- "token": "string",
- "expirationTime": "2019-08-24T14:15:22Z"
}
Changes the password of the API user.
To keep your login secure, use a complex password and don't use passwords that have been used elsewhere.
The new password must meet the following criteria:
newPassword required | string The desired new password for the API user account |
{- "newPassword": "string"
}
{- "message": "string"
}
Instruments are financial assets that can be traded on the world's financial markets. The classes of asset that we are most concerned with for the purposes of investor transparency include stocks and shares, bonds, cash and tradeable funds of any kind. These are typically the types of asset used by fund managers to make up pensions and other investment products that retail investors and employees invest in, either directly or via a pension scheme.
The Tumelo Transparency API makes it easy to discover the underlying instruments making up a fund. We distinguish two main classes of instrument, depending on whether the instrument represents a simple share in a company or it represents a fund such as an ETF that is made up of many underlying instruments. We refer to instruments that can't be broken down or decomposed into constituent instruments as atomic, and those that can be decomposed as composite.
All instruments on the Tumelo platform are identified by their ISIN (International Securities Identification Number).
Organizations represent public companies and other institutions such as governments that issue shares or bonds which are then traded on the world's financial markets.
In order to be able to unambiguously refer to a specific company or other organization, we make use of Organization Identifiers. Any given organization will have at least one identifier associated with it. The majority of organizations have an associated Legal Entity Identifier (LEI), which is a 20-character alpha-numeric code based on the ISO 17442 standard. LEIs are managed by the Global Legal Entity Identifier Foundation (GLEIF) which describes itself as a supra-national not-for-profit organization headquartered in Switzerland.
LEI is a relatively new standard, but companies involved in settling trades within the EU are required by regulation to have an LEI. Some organizations, particularly those outside the EU may not have an LEI yet, so we also support other identification schemes. Currently this includes D-U-N-S numbers, issued by Dunn & Bradstreet.
When using the Transparency API, organization identifiers are prefixed by the name of the identification scheme, separated from the identifier itself by an underscore _
character, for example LEI_HWUPKR0MPOU8FGXBT394
or DUNS_152618153
.
Whilst most organizations will have a single associated identifier, it is possible for an organization to have more than one identifier. When the information relating to a specific organization returned, all known identifiers are included.
Returns a list of organizations, including the information available on each one. Without any pagination parameters, a maximum of 50 organizations will be returned.
If information is required for a list of specific organizations, the issuedIsins
, externalIdentifiers
, and ids
query parameters may be used to define a filter for the response such that only organizations matching one defined by the query parameters will be included. For example:
/organizations?issuedIsins=GB00BN7CG237,USG50027AE42
The request returns only organizations for which a match can be found. Any duplicate organizations are returned just once. The order of organizations returned is not determined by the filters.
Note; the filters are additive, so if 2 or more query parameters are provided returned organizations must match both of them.
ids | Array of strings A comma separated list of organization ids. |
externalIdentifiers | Array of strings (OrganizationIdentifier) A comma separated list of organization identifiers. |
search | string A case insensitive filter that can be used to search by display title, legal title or an organization identifier. It may have a maximum character length of 50. |
issuedIsins | Array of strings (ISIN) A comma separated list of ISINs. |
pageSize | integer (PageSize) [ 1 .. 100 ] Default: 50 The maximum number of elements to return. |
nextPageToken | string Passing a nextPageToken will cause the next page of results to be retrieved. |
{- "organizations": [
- {
- "id": "string",
- "externalIdentifiers": [
- "string"
], - "displayName": "string",
- "legalName": "string",
- "websiteUrl": "string",
- "logoUrl": "string",
- "bio": {
- "description": "string",
- "sourceUrl": "string",
- "source": "wikipedia"
}, - "issuedIsins": [
- "string"
], - "headquarters": {
- "isoCountryCode2": "st"
}, - "industry": {
- "naics2017": {
- "code": "string",
- "title": "string"
}
}
}
], - "nextPageToken": "string"
}
Returns the organization based on its identifier.
organizationId required | string An identifier of the organization for which information is required. |
{- "id": "string",
- "externalIdentifiers": [
- "string"
], - "displayName": "string",
- "legalName": "string",
- "websiteUrl": "string",
- "logoUrl": "string",
- "bio": {
- "description": "string",
- "sourceUrl": "string",
- "source": "wikipedia"
}, - "issuedIsins": [
- "string"
], - "headquarters": {
- "isoCountryCode2": "st"
}, - "industry": {
- "naics2017": {
- "code": "string",
- "title": "string"
}
}
}
Lists the general meetings for an organization.
If you wish to list general meetings for any organization, provide a -
for the organizationId part of the url.
e.g organizations/-/generalMeetings
To get a list of general meetings from a list of ids, pass a list of ids in the 'generalMeetingIds' field and provide a '-' for the organizationId part of the url.
General meetings are ordered by ascending date of general meeting.
organizationId required | string An identifier of the organization for which information is required. |
pageSize | integer (PageSize) [ 1 .. 100 ] Default: 50 The maximum number of elements to return. |
dateAfter | string <date> Passing a general meeting after date will return general meetings that have a date on or after the specified date. |
dateBefore | string <date> Passing a general meeting before date will return general meetings that have a date before the specified date. |
generalMeetingIds | Array of strings Passing a list of general meeting ids will return general meetings that match the ids. |
nextPageToken | string Passing a nextPageToken will cause the next page of results to be retrieved. |
{- "generalMeetings": [
- {
- "id": "string",
- "organizationId": "string",
- "generalMeetingType": "annual",
- "date": "2019-08-24",
- "url": "string",
- "announcementTime": "2019-08-24",
- "announcementUrl": "string",
- "proxyNoticeUrl": "string",
- "resultsUrl": "string",
- "recordDate": "2019-08-24"
}
], - "nextPageToken": "string"
}
Returns the general meeting based on its identifier.
organizationId required | string An identifier of the organization for which information is required. |
generalMeetingId required | string An identifier of the general meeting for which information is required. |
{- "id": "string",
- "organizationId": "string",
- "generalMeetingType": "annual",
- "date": "2019-08-24",
- "url": "string",
- "announcementTime": "2019-08-24",
- "announcementUrl": "string",
- "proxyNoticeUrl": "string",
- "resultsUrl": "string",
- "recordDate": "2019-08-24"
}
Returns the proposals for a general meeting.
organizationId required | string An identifier of the organization for which information is required. |
generalMeetingId required | string An identifier of the general meeting for which information is required. |
hasOutcome | boolean Filter by whether the proposal has an outcome. |
{- "proposals": [
- {
- "id": "string",
- "generalMeetingId": "string",
- "organizationId": "string",
- "sequenceIdentifier": "string",
- "title": "string",
- "formattedDescription": "string",
- "source": "management",
- "managementRecommendation": "for",
- "managementRecommendationDescription": "string",
- "passThreshold": 1,
- "outcome": {
- "createTime": "2019-08-24T14:15:22Z",
- "decision": "for",
- "votes": {
- "for": 0,
- "against": 0,
- "abstain": 0,
- "brokerNonVote": 0,
- "withheld": 0,
- "oneYear": 0,
- "twoYears": 0,
- "threeYears": 0
}
}, - "sequenceNumber": 0,
- "votable": true,
- "fullText": "string",
- "classificationCodes": [
- "EQ",
- "HR"
], - "votingOptions": [
- "for",
- "against",
- "abstain"
], - "currentlyVotable": true,
- "withdrawTime": "2019-08-24T14:15:22Z",
- "parentProposalId": "string"
}
]
}
Habitats represent a private view or slice of the Tumelo platform as seen by a service user. A habitat provides an environment to manage distinct sets of investors with varying accout configurations. Typically, a customer will be assigned two distinct habitats:
The unique identifier for each habitat will be communicated to the user as part of the onboarding process.
Each habitat has a set of subscribed instruments. Only subscribed instruments can:
You can see the full list of instruments to which your habitat is subscribed using the Get Subscribed Instruments endpoint (/habitats/{habitatId}/instruments
).
If you wish to add or remove instruments from your subscribed instrument set please email support@tumelo.com.
Returns a habitat's list of subscribed instruments.
habitatId required | string The habitat identifier. |
{- "instruments": [
- {
- "instrumentReferences": [
- {
- "idType": "string",
- "idValue": "string"
}
], - "isin": "string",
- "title": "string",
- "mifirCode": "string",
- "isComposite": true
}
]
}
Returns the breakdown of the composite instrument in terms of the organizations, non-composite instruments and composite instruments that make up the latest composition.
The endpoint will return a 400 Bad Request
error when the security identifier is
malformed or not supplied.
The endpoint will return a 404 Not Found
error when the breakdown cannot be computed
due to either the requested fund not belonging to the supplied habitat, the fund containing
no composition or the latest composition being empty.
habitatId required | string The habitat identifier. |
required | object (InstrumentReference2) An instrument reference object. Properties |
depth | integer <int32> Optional max depth to get fund compositions. A value of 0 or lower will get the full breakdown. |
{- "instrument": {
- "idType": "string",
- "idValue": "string"
}, - "depth": 0
}
{- "rootNodeId": "string",
- "nodes": [
- {
- "nodeId": "string",
- "nodeType": "other",
- "aggregateWeight": 1
}
], - "edges": [
- {
- "from": "string",
- "to": "string",
- "weight": 1
}
], - "organizationDetails": [
- {
- "nodeId": "string",
- "organizationId": "string",
- "weightByVotingRights": {
- "with": 1,
- "without": 1,
- "unknown": 1
}, - "weightByInstrumentType": {
- "equity": 1,
- "bond": 1,
- "otherDebt": 1,
- "other": 1
}
}
], - "compositeInstrumentDetails": [
- {
- "nodeId": "string",
- "instrumentReference": {
- "idType": "string",
- "idValue": "string"
}, - "title": "string",
- "fundManagerId": "string",
- "validAt": "2019-08-24T14:15:22Z"
}
], - "nonCompositeInstrumentDetails": [
- {
- "nodeId": "string",
- "instrumentReference": {
- "idType": "string",
- "idValue": "string"
}, - "instrumentType": "equity"
}
]
}
Returns the breakdown of the instrument in terms of the instruments that are the underlying stocks, shares and bonds. The top level 'readTime' represents the time this computation was made, the 'validAt's within the 'basedOn' section represent the valid time for the compositions of the isins they're paired with.
habitatId required | string The habitat identifier. |
isin required | string (ISIN) ^[A-Z]{2}[A-Z0-9]{10}$ The ISIN of the fund or composite instrument for which information is required. |
{- "readTime": "2019-08-24T14:15:22Z",
- "basedOn": {
- "instruments": [
- {
- "instrument": {
- "idType": "string",
- "idValue": "string",
- "isin": "string"
}, - "validAt": "2019-08-24T14:15:22Z"
}
], - "modelPortfolios": [
- {
- "modelPortfolio": {
- "id": "string"
}, - "validAt": "2019-08-24T14:15:22Z"
}
], - "investorAccounts": [
- {
- "account": {
- "id": "string"
}, - "validAt": "2019-08-24T14:15:22Z"
}
]
}, - "components": {
- "instruments": [
- {
- "weight": 1,
- "instrument": {
- "instrumentReferences": [
- {
- "idType": "string",
- "idValue": "string"
}
], - "isin": "string",
- "title": "string",
- "mifirCode": "string",
- "isComposite": true
}
}
], - "cash": [
- {
- "currency": "string",
- "weight": 1
}
], - "others": 1
}
}
Returns the breakdown of the instrument in terms of the organizations that issued the underlying stocks, shares and bonds. The top level 'readTime' represents the time this computation was made, the 'validAt's within the 'basedOn' section represent the valid time for the compositions of the isins they're paired with.
habitatId required | string The habitat identifier. |
isin required | string (ISIN) ^[A-Z]{2}[A-Z0-9]{10}$ The ISIN of the fund or composite instrument for which information is required. |
{- "readTime": "2019-11-01T13:02:30.000Z",
- "basedOn": {
- "instruments": [
- {
- "instrument": {
- "idType": "isin",
- "idValue": "GB1234567890"
}, - "validAt": "2019-10-31T00:00:00.000Z"
}
], - "modelPortfolios": [
- {
- "modelPortfolio": {
- "id": "c252d86f-9e12-479c-8d96-6b422b53d637"
}, - "validAt": "2019-11-05T00:00:00.000Z"
}
], - "investorAccounts": [
- {
- "account": {
- "id": "279c9dbd-b527-4972-bd81-16a1cd6ffc25"
}, - "validAt": "2019-10-03T00:00:00.000Z"
}
]
}, - "components": {
- "organizations": [
- {
- "weight": 0.2034,
- "organization": {
- "id": "864da8f8-98b1-4d57-925f-62db70c0fcf9",
- "displayName": "Apple",
- "externalIdentifiers": [
- "LEI_HWUPKR0MPOU8FGXBT394"
], - "legalName": "Apple Inc",
- "bio": {
- "description": "Apple Inc. is an American multinational technology company headquartered in Cupertino California, that designs, develops, and sells consumer electronics, computer software, and online services.",
- "source": "wikipedia"
}
}
}, - {
- "weight": 0.2966,
- "organization": {
- "id": "7884c319-f74a-47d6-a590-e0d50e980ea5",
- "displayName": "Unilever",
- "externalIdentifiers": [
- "LEI_549300TK7G7NZTVM1Z30"
], - "legalName": "Unilever PLC",
- "bio": {
- "description": "Unilever is a British-Dutch transnational consumer goods company co-headquartered in London, England, and Rotterdam, Netherlands.",
- "source": "wikipedia"
}
}
}
], - "cash": [
- {
- "currency": "USD",
- "weight": 0.185
}, - {
- "currency": "GBP",
- "weight": 0.105
}
], - "others": 0.21
}
}
Investors hold investments in financial assets. Each investor can have a number of accounts providing access to a variety of investment portfolios.
Investors are associated with a habitat
and each habitat has its own distinct set of investors.
All investor operations must be performed within your assigned habitat, otherwise a response of 403 Forbidden is returned.
Creates an investor within the specified habitat. An error will be returned if an investor already exists with the same externalId
.
habitatId required | string The habitat identifier. |
externalId | string (ExternalId) [ 1 .. 250 ] characters ^[0-9a-zA-Z ._\-:]{1,250}$ An object identifier assigned by the provider. This is not a Tumelo identifier. |
{- "externalId": "string"
}
{- "id": "string",
- "externalId": "string"
}
Returns a list of all the investors in the habitat.
Additionally a list of either Tumelo or external identifiers can be provided to filter the results.
Either one of these two query parameters can be provided, but not both in the same request:
ids
externalIds
Requests that include both query parameters return a 400 Bad Request response code.
Here is an example of the format for each query parameter:
/habitats/<habitatId>/investors?ids=<value1>,<value2>
/habitats/<habitatId>/investors?externalIds=<value1>,<value2>
The request returns only investors for which a match can be found. Any duplicate investors are returned just once. The order of investors returned is not determined by the ids
and externalIds
filters.
The request is paginated if there are more investors to list than the pageSize
. When passing a nextPageToken, the same filter query parameters must be set for each page request.
habitatId required | string The habitat identifier. |
ids | Array of strings A comma separated list of Tumelo investor identifiers. |
externalIds | Array of strings (ExternalId) A comma separated list of external investor identifiers. |
pageSize | integer (PageSize) [ 1 .. 100 ] Default: 50 The maximum number of elements to return. |
nextPageToken | string Passing a nextPageToken will cause the next page of results to be retrieved. |
{- "investors": [
- {
- "id": "string",
- "externalId": "string"
}
], - "nextPageToken": "string"
}
Deletes the investor, the investor accounts and compositions. Ballots with an expirationTime in the future:
habitatId required | string The habitat identifier. |
investorId required | string The investor identifier. |
{- "message": "Unauthorized - check you have included a valid Authorization header in this request."
}
The account
is the entity that holds the investor's investment funds. An investor may hold multiple accounts to support the separation of investment choices, such as ISAs or pensions.
The configuration of an account is represented by a composition
entity which describes the account's components in terms of weighted investment instruments, cash and others.
Creates an account for an investor. An error will be returned if an account already exists with the same externalId
within the habitat.
habitatId required | string The habitat identifier. |
investorId required | string The investor identifier. |
externalId | string (ExternalId) [ 1 .. 250 ] characters ^[0-9a-zA-Z ._\-:]{1,250}$ An object identifier assigned by the provider. This is not a Tumelo identifier. |
title | string [ 1 .. 250 ] characters ^[0-9a-zA-ZÀ-ú ._\-,'&()\/:]{1,250}$ Title of the account. |
accountTags | Array of strings Array of account tag IDs, which is the UUID generated for the account tag on its creation. |
{- "externalId": "string",
- "title": "string",
- "accountTags": [
- "string"
]
}
{- "id": "string",
- "externalId": "string",
- "title": "string",
- "accountTags": [
- "string"
]
}
Returns a list of investor accounts with details of each account.
habitatId required | string The habitat identifier. |
investorId required | string The investor identifier. |
{- "accounts": [
- {
- "id": "string",
- "externalId": "string",
- "title": "string",
- "accountTags": [
- "string"
]
}
]
}
Delete investor account.
habitatId required | string The habitat identifier. |
investorId required | string The investor identifier. |
accountId required | string The investor account identifier. |
{- "message": "Unauthorized - check you have included a valid Authorization header in this request."
}
Creates an account composition to describe its components. A composition is a snapshot of the account makeup at a specified point in time (the value of the validTime
property).
The composition with the latest validTime is the current composition for the account. A composition at a particular point in time can be overridden by posting another with the same validTime.
This time based approach to the creation of account compositions allows the recording of compositions over time.
habitatId required | string The habitat identifier. |
investorId required | string The investor identifier. |
accountId required | string The account identifier. |
validTime required | string <date-time> The valid date and time for the composition. This cannot be a time in the future. The valid format is date-time notation as defined by RFC 3339, section 5.6. |
object (TotalSettledValue) The monetary value of all assets held in the composition at the time described by the | |
object (InvestorAccountCompositionComponents) The weighted components of the composition at the time described by the |
{- "validTime": "2019-08-24T14:15:22Z",
- "totalSettledValue": {
- "currency": "string",
- "amount": 0
}, - "components": {
- "modelPortfolios": [
- {
- "modelPortfolioId": "string",
- "weight": 1,
- "settledQuantity": 0
}
], - "instruments": [
- {
- "instrumentReference": {
- "idType": "string",
- "idValue": "string"
}, - "isin": "string",
- "weight": 1,
- "weightUnknown": true,
- "units": 0,
- "settledQuantity": 0,
- "quantification": {
- "unitType": "string",
- "settledQuantity": 0
}
}
], - "cash": [
- {
- "currency": "string",
- "weight": 1,
- "weightUnknown": true,
- "value": 0,
- "settledQuantity": 0,
- "quantification": {
- "unitType": "string",
- "settledQuantity": 0
}
}
], - "others": 1
}
}
{- "id": "string",
- "createTime": "2019-08-24T14:15:22Z",
- "validTime": "2019-08-24T14:15:22Z",
- "totalSettledValue": {
- "currency": "string",
- "amount": 0
}, - "components": {
- "modelPortfolios": [
- {
- "modelPortfolioId": "string",
- "weight": 1,
- "settledQuantity": 0
}
], - "instruments": [
- {
- "instrumentReference": {
- "idType": "string",
- "idValue": "string"
}, - "isin": "string",
- "weight": 1,
- "weightUnknown": true,
- "units": 0,
- "settledQuantity": 0,
- "quantification": {
- "unitType": "string",
- "settledQuantity": 0
}
}
], - "cash": [
- {
- "currency": "string",
- "weight": 1,
- "weightUnknown": true,
- "value": 0,
- "settledQuantity": 0,
- "quantification": {
- "unitType": "string",
- "settledQuantity": 0
}
}
], - "others": 1
}
}
List all account compositions in chronological order. The composition with the latest validAt
time is listed first. For compositions with the same validAt
times, the one with the latest createdAt
time is listed first. Without any pagination parameters, a maximum of 50 compositions will be returned.
habitatId required | string The habitat identifier. |
investorId required | string The investor identifier. |
accountId required | string The account identifier. |
pageSize | integer (PageSize) [ 1 .. 100 ] Default: 50 The maximum number of elements to return. |
nextPageToken | string Passing a nextPageToken will cause the next page of results to be retrieved. |
{- "compositions": [
- {
- "id": "string",
- "createTime": "2019-08-24T14:15:22Z",
- "validTime": "2019-08-24T14:15:22Z",
- "totalSettledValue": {
- "currency": "string",
- "amount": 0
}, - "components": {
- "modelPortfolios": [
- {
- "modelPortfolioId": "string",
- "weight": 1,
- "settledQuantity": 0
}
], - "instruments": [
- {
- "instrumentReference": {
- "idType": "string",
- "idValue": "string"
}, - "isin": "string",
- "weight": 1,
- "weightUnknown": true,
- "units": 0,
- "settledQuantity": 0,
- "quantification": {
- "unitType": "string",
- "settledQuantity": 0
}
}
], - "cash": [
- {
- "currency": "string",
- "weight": 1,
- "weightUnknown": true,
- "value": 0,
- "settledQuantity": 0,
- "quantification": {
- "unitType": "string",
- "settledQuantity": 0
}
}
], - "others": 1
}
}
], - "nextPageToken": "string"
}
Returns the breakdown of the investor account in terms of the organizations that issued the underlying stocks, shares and bonds. The top level 'readTime' represents the time this computation was made, the 'validAt's within the 'basedOn' section represent the valid time for the compositions of the isins they're paired with.
The endpoint will return a 400 Bad Request
error when the organization breakdown cannot be computed due to either the account containing no composition or the latest composition being empty.
habitatId required | string The habitat identifier. |
investorId required | string The investor identifier. |
accountId required | string The account identifier. |
{- "readTime": "2019-11-01T13:02:30.000Z",
- "basedOn": {
- "instruments": [
- {
- "instrument": {
- "idType": "isin",
- "idValue": "GB1234567890"
}, - "validAt": "2019-10-31T00:00:00.000Z"
}
], - "modelPortfolios": [
- {
- "modelPortfolio": {
- "id": "c252d86f-9e12-479c-8d96-6b422b53d637"
}, - "validAt": "2019-11-05T00:00:00.000Z"
}
], - "investorAccounts": [
- {
- "account": {
- "id": "279c9dbd-b527-4972-bd81-16a1cd6ffc25"
}, - "validAt": "2019-10-03T00:00:00.000Z"
}
]
}, - "components": {
- "organizations": [
- {
- "weight": 0.2034,
- "organization": {
- "id": "ba4d3052-7db9-427c-a4fc-e947c2380bcb",
- "displayName": "Apple",
- "externalIdentifiers": [
- "LEI_HWUPKR0MPOU8FGXBT394"
], - "legalName": "Apple Inc",
- "bio": {
- "description": "Apple Inc. is an American multinational technology company headquartered in Cupertino California, that designs, develops, and sells consumer electronics, computer software, and online services.",
- "source": "wikipedia"
}
}
}, - {
- "weight": 0.2966,
- "organization": {
- "id": "1aba26ef-ca6f-4558-8095-85c7e04eeed2",
- "displayName": "Unilever",
- "externalIdentifiers": [
- "LEI_549300TK7G7NZTVM1Z30"
], - "legalName": "Unilever PLC",
- "bio": {
- "description": "Unilever is a British-Dutch transnational consumer goods company co-headquartered in London, England, and Rotterdam, Netherlands.",
- "source": "wikipedia"
}
}
}
], - "cash": [
- {
- "currency": "USD",
- "weight": 0.185
}, - {
- "currency": "GBP",
- "weight": 0.105
}
], - "others": 0.21
}
}
Creates an Account Tag.
habitatId required | string The habitat identifier. |
id | string The account tag identifier, which is the UUID generated for this account tag on its creation. |
title | string The name of the account tag. |
externalId | string (ExternalId) [ 1 .. 250 ] characters ^[0-9a-zA-Z ._\-:]{1,250}$ An object identifier assigned by the provider. This is not a Tumelo identifier. |
createTime | string <date-time> The time the account tag was created in the Tumelo storage. The valid format is date-time notation as defined by RFC 3339, section 5.6. |
updateTime | string <date-time> The time the account tag was updated in the Tumelo storage. The valid format is date-time notation as defined by RFC 3339, section 5.6. |
{- "id": "string",
- "title": "string",
- "externalId": "string",
- "createTime": "2019-08-24T14:15:22Z",
- "updateTime": "2019-08-24T14:15:22Z"
}
{- "id": "string",
- "title": "string",
- "externalId": "string",
- "createTime": "2019-08-24T14:15:22Z",
- "updateTime": "2019-08-24T14:15:22Z"
}
Returns a list of all the account tags in the habitat.
Additionally a list of either ids or external identifiers can be provided to filter the results.
Either one of these two query parameters can be provided, but not both in the same request:
ids
externalIds
Requests that include both query parameters return a 400 Bad Request response code.
Here is an example of the format for each query parameter:
/habitats/<habitatId>/accountTag?ids=<value1>,<value2>
/habitats/<habitatId>/accountTags?externalIds=<value1>,<value2>
The request returns only accounts tags for which a match can be found.
The response is paginated if there are more account tags to list than the pageSize
. When passing a nextPageToken, the ids and externalIds query parameters must also be set.
habitatId required | string The habitat identifier. |
ids | Array of strings A comma-separated list of Tumelo account tag identifiers. |
externalIds | Array of strings (ExternalId) A comma-separated list of external account tag identifiers. |
pageSize | integer (PageSize) [ 1 .. 100 ] Default: 50 The maximum number of elements to return. |
nextPageToken | string Passing a nextPageToken will cause the next page of results to be retrieved. |
{- "accountTags": [
- {
- "id": "string",
- "title": "string",
- "externalId": "string",
- "createTime": "2019-08-24T14:15:22Z",
- "updateTime": "2019-08-24T14:15:22Z"
}
], - "nextPageToken": "string"
}
The modelPortfolio
is an entity that can hold compositions defined by the API user. Its intended uses are:
Returns the model portfolios that are associated with this habitat.
habitatId required | string The habitat identifier. |
pageSize | integer (PageSize) [ 1 .. 100 ] Default: 50 The maximum number of elements to return. |
nextPageToken | string Passing a nextPageToken will cause the next page of results to be retrieved. |
{- "modelPortfolios": [
- {
- "id": "string",
- "title": "string",
- "externalId": "string"
}
], - "nextPageToken": "string"
}
List all model portfolio compositions in chronological order. The composition with the latest validAt
time is listed first. For compositions with the same validAt
times, the one with the latest createdAt
time is listed first. Without any pagination parameters, a maximum of 50 compositions will be returned.
habitatId required | string The habitat identifier. |
modelPortfolioId required | string The model portfolio identifier. |
pageSize | integer (PageSize) [ 1 .. 100 ] Default: 50 The maximum number of elements to return. |
nextPageToken | string Passing a nextPageToken will cause the next page of results to be retrieved. |
{- "compositions": [
- {
- "id": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "validAt": "2019-08-24T14:15:22Z",
- "components": {
- "instruments": [
- {
- "isin": "string",
- "instrument": {
- "idType": "string",
- "idValue": "string"
}, - "weight": 1
}
], - "cash": [
- {
- "currency": "string",
- "weight": 1
}
], - "others": 1
}
}
], - "nextPageToken": "string"
}
Create a model portfolio composition.
habitatId required | string The habitat identifier. |
modelPortfolioId required | string The model portfolio identifier. |
validAt required | string <date-time> The valid date and time for the composition. This cannot be a time in the future. The valid format is date-time notation as defined by RFC 3339, section 5.6. |
required | object (ModelPortfolioCompositionComponents2) The weighted components of the composition at the time described by the |
{- "validAt": "2019-08-24T14:15:22Z",
- "components": {
- "instruments": [
- {
- "instrument": {
- "idType": "string",
- "idValue": "string"
}, - "weight": 1
}
], - "cash": [
- {
- "currency": "string",
- "weight": 1
}
], - "others": 1
}
}
{- "id": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "validAt": "2019-08-24T14:15:22Z",
- "components": {
- "instruments": [
- {
- "instrument": {
- "idType": "string",
- "idValue": "string"
}, - "weight": 1
}
], - "cash": [
- {
- "currency": "string",
- "weight": 1
}
], - "others": 1
}
}
Returns the breakdown of the model portfolio in terms of the organizations that issued the underlying stocks, shares and bonds. The top level 'readTime' represents the time this computation was made, the 'validAt's within the 'basedOn' section represent the valid time for the compositions of the isins they're paired with.
habitatId required | string The habitat identifier. |
modelPortfolioId required | string The model portfolio identifier. |
{- "readTime": "2019-11-01T13:02:30.000Z",
- "basedOn": {
- "instruments": [
- {
- "instrument": {
- "idType": "isin",
- "idValue": "GB1234567890"
}, - "validAt": "2019-10-31T00:00:00.000Z"
}
], - "modelPortfolios": [
- {
- "modelPortfolio": {
- "id": "c252d86f-9e12-479c-8d96-6b422b53d637"
}, - "validAt": "2019-11-05T00:00:00.000Z"
}
], - "investorAccounts": [
- {
- "account": {
- "id": "279c9dbd-b527-4972-bd81-16a1cd6ffc25"
}, - "validAt": "2019-10-03T00:00:00.000Z"
}
]
}, - "components": {
- "organizations": [
- {
- "weight": 0.2034,
- "organization": {
- "id": "ba4d3052-7db9-427c-a4fc-e947c2380bcb",
- "displayName": "Apple",
- "externalIdentifiers": [
- "LEI_HWUPKR0MPOU8FGXBT394"
], - "legalName": "Apple Inc",
- "bio": {
- "description": "Apple Inc. is an American multinational technology company headquartered in Cupertino California, that designs, develops, and sells consumer electronics, computer software, and online services.",
- "source": "wikipedia"
}
}
}, - {
- "weight": 0.2966,
- "organization": {
- "id": "1aba26ef-ca6f-4558-8095-85c7e04eeed2",
- "displayName": "Unilever",
- "externalIdentifiers": [
- "LEI_549300TK7G7NZTVM1Z30"
], - "legalName": "Unilever PLC",
- "bio": {
- "description": "Unilever is a British-Dutch transnational consumer goods company co-headquartered in London, England, and Rotterdam, Netherlands.",
- "source": "wikipedia"
}
}
}
], - "cash": [
- {
- "currency": "USD",
- "weight": 0.185
}, - {
- "currency": "GBP",
- "weight": 0.105
}
], - "others": 0.21
}
}
Polls represent an opportunity for an investor to respond to a specific question, referred to here as a proposal (also known as a resolution), being asked at an organization's shareholder meeting, typically an AGM (Annual General Meeting) or EGM (Extraordinary General Meeting).
A poll will close before (generally two weeks) the shareholder meeting so there is time to communicate the results of the poll to the fund manager before the shareholder meeting occurs.
Returns a list of ballots for a particular investor.
For the investor id, a wildcard -
may be supplied. In that particular case, all ballots for all the users within a habitat are returned.
This endpoint is paginated. To fetch the next page, pass the filter and query params from the previous request along with the nextPageToken
received in the previous response, in the next request.
habitatId required | string The habitat identifier. |
investorId required | string The investor identifier. |
pollIds | Array of strings includes only ballots that relate to the requested poll IDs |
expireAfter | string <date-time> includes only ballots that expire on or after a given time |
expireBefore | string <date-time> includes only ballots that expire before a given time |
latestVotingDeadlineAfter | string <date-time> includes only ballots that have a latest voting deadline on or after a given time |
latestVotingDeadlineBefore | string <date-time> includes only ballots that have a latest voting deadline before a given time |
createdAfter | string <date-time> includes only ballots that were created on or after the ballot's create time |
createdBefore | string <date-time> includes only ballots that were created before the ballot's create time |
hasVoted | boolean optional filter to based on whether the investor has used the ballot to vote already |
nextPageToken | string Passing a nextPageToken will cause the next page of results to be retrieved. |
pageSize | integer (PageSize) [ 1 .. 100 ] Default: 50 The maximum number of ballots to return. |
{- "ballots": [
- {
- "id": "string",
- "investorId": "string",
- "pollId": "string",
- "createTime": "2019-08-24T14:15:22Z",
- "expirationTime": "2019-08-24T14:15:22Z",
- "earliestVotingDeadline": "2019-08-24T14:15:22Z",
- "latestVotingDeadline": "2019-08-24T14:15:22Z",
- "investorVote": {
- "response": "for",
- "responseTime": "2019-08-24T14:15:22Z",
- "voteMethod": "manual"
}
}
], - "nextPageToken": "string"
}
Returns a ballot given the habitat, investor and ballot IDs.
habitatId required | string The habitat identifier. |
investorId required | string The investor identifier. |
ballotId required | string The ballot identifier. |
{- "ballot": {
- "id": "string",
- "investorId": "string",
- "pollId": "string",
- "createTime": "2019-08-24T14:15:22Z",
- "expirationTime": "2019-08-24T14:15:22Z",
- "earliestVotingDeadline": "2019-08-24T14:15:22Z",
- "latestVotingDeadline": "2019-08-24T14:15:22Z",
- "investorVote": {
- "response": "for",
- "responseTime": "2019-08-24T14:15:22Z",
- "voteMethod": "manual"
}
}
}
Cast a vote on a poll. This endpoint resolves to a Task resource that expresses the action of responding to a ballot and subsequently voting on a poll.
A vote will only be accepted if all the following are true:
habitatId required | string The habitat identifier. |
investorId required | string The investor identifier. |
ballotId required | string The ballot identifier. |
The request body to cast a vote on a ballot. Includes the response the investor gave to the ballot.
response required | string (VoteOptions) Enum: "for" "against" "abstain" "withhold" "no_action" The valid response options to cast a vote on a ballot. Note that these options are not always valid for all polls. We might tighten our validation in the future to restrict the set of valid VoteOptions for a given poll. If we do so we will also provide a mechanism to understand what options are valid in advance of voting. |
{- "response": "for"
}
{- "id": "string",
- "investorId": "string",
- "pollId": "string",
- "createTime": "2019-08-24T14:15:22Z",
- "expirationTime": "2019-08-24T14:15:22Z",
- "earliestVotingDeadline": "2019-08-24T14:15:22Z",
- "latestVotingDeadline": "2019-08-24T14:15:22Z",
- "investorVote": {
- "response": "for",
- "responseTime": "2019-08-24T14:15:22Z",
- "voteMethod": "manual"
}
}
Lists all polls in a habitat. Polls are ordered by their close date, ascending.
This endpoint is paginated. To fetch the next page, pass the filter and query params from the previous request along with the nextPageToken
received in the previous response, in the next request.
habitatId required | string The habitat identifier. |
nextPageToken | string Passing a nextPageToken will cause the next page of results to be retrieved. |
pageSize | integer (PageSize) [ 1 .. 100 ] Default: 50 The maximum number of polls to return. |
pollIds | Array of strings A comma separated list of poll IDs. When provided, the endpoint will only return polls associated with any of the provided IDs. |
closeTimeBefore | string <date-time> Passing a close time before date will return polls that have a close time before the specified date. |
closeTimeAfter | string <date-time> Passing a close time after date will return polls that have a close time after the specified date. |
publishedBefore | string <date-time> Passing a published before date will return polls that have a published time before the specified point. |
publishedAfter | string <date-time> Passing a published after date will return polls that have a published time after the specified point. |
organizationIds | Array of strings A comma separated list of organization IDs. When provided, the endpoint will only return polls associated with any of the provided IDs. |
{- "polls": [
- {
- "id": "string",
- "title": "string",
- "formattedDescription": "string",
- "publishAt": "2019-08-24T14:15:22Z",
- "closeAt": "2019-08-24T14:15:22Z",
- "tags": [
- {
- "id": "string",
- "title": "string"
}
], - "teaserText": "string",
- "teaserImage": {
- "URL": "string",
- "altText": "string"
}, - "isHotTopic": true,
- "relationships": {
- "organization": {
- "id": "string",
- "externalIdentifiers": [
- "string"
], - "displayName": "string",
- "legalName": "string",
- "websiteUrl": "string",
- "logoUrl": "string",
- "bio": {
- "description": "string",
- "sourceUrl": "string",
- "source": "wikipedia"
}, - "issuedIsins": [
- "string"
], - "headquarters": {
- "isoCountryCode2": "st"
}, - "industry": {
- "naics2017": {
- "code": "string",
- "title": "string"
}
}
}, - "generalMeeting": {
- "id": "string",
- "organizationId": "string",
- "generalMeetingType": "annual",
- "date": "2019-08-24",
- "url": "string",
- "announcementTime": "2019-08-24",
- "announcementUrl": "string",
- "proxyNoticeUrl": "string",
- "resultsUrl": "string",
- "recordDate": "2019-08-24"
}, - "proposal": {
- "id": "string",
- "generalMeetingId": "string",
- "organizationId": "string",
- "sequenceIdentifier": "string",
- "title": "string",
- "formattedDescription": "string",
- "source": "management",
- "managementRecommendation": "for",
- "managementRecommendationDescription": "string",
- "passThreshold": 1,
- "outcome": {
- "createTime": "2019-08-24T14:15:22Z",
- "decision": "for",
- "votes": {
- "for": 0,
- "against": 0,
- "abstain": 0,
- "brokerNonVote": 0,
- "withheld": 0,
- "oneYear": 0,
- "twoYears": 0,
- "threeYears": 0
}
}, - "sequenceNumber": 0,
- "votable": true,
- "fullText": "string",
- "classificationCodes": [
- "EQ",
- "HR"
], - "votingOptions": [
- "for",
- "against",
- "abstain"
], - "currentlyVotable": true,
- "withdrawTime": "2019-08-24T14:15:22Z",
- "parentProposalId": "string"
}
}, - "tally": {
- "forCount": 0,
- "againstCount": 0,
- "abstainCount": 0,
- "withholdCount": 0,
- "noActionCount": 0,
- "validAt": "2019-08-24T14:15:22Z"
}, - "isNewToPlatform": true,
- "headline": "string"
}
], - "nextPageToken": "string"
}
Returns the poll that has the specified ID.
habitatId required | string The habitat identifier. |
pollId required | string The poll identifier. |
{- "poll": {
- "id": "string",
- "title": "string",
- "formattedDescription": "string",
- "publishAt": "2019-08-24T14:15:22Z",
- "closeAt": "2019-08-24T14:15:22Z",
- "tags": [
- {
- "id": "string",
- "title": "string"
}
], - "teaserText": "string",
- "teaserImage": {
- "URL": "string",
- "altText": "string"
}, - "isHotTopic": true,
- "relationships": {
- "organization": {
- "id": "string",
- "externalIdentifiers": [
- "string"
], - "displayName": "string",
- "legalName": "string",
- "websiteUrl": "string",
- "logoUrl": "string",
- "bio": {
- "description": "string",
- "sourceUrl": "string",
- "source": "wikipedia"
}, - "issuedIsins": [
- "string"
], - "headquarters": {
- "isoCountryCode2": "st"
}, - "industry": {
- "naics2017": {
- "code": "string",
- "title": "string"
}
}
}, - "generalMeeting": {
- "id": "string",
- "organizationId": "string",
- "generalMeetingType": "annual",
- "date": "2019-08-24",
- "url": "string",
- "announcementTime": "2019-08-24",
- "announcementUrl": "string",
- "proxyNoticeUrl": "string",
- "resultsUrl": "string",
- "recordDate": "2019-08-24"
}, - "proposal": {
- "id": "string",
- "generalMeetingId": "string",
- "organizationId": "string",
- "sequenceIdentifier": "string",
- "title": "string",
- "formattedDescription": "string",
- "source": "management",
- "managementRecommendation": "for",
- "managementRecommendationDescription": "string",
- "passThreshold": 1,
- "outcome": {
- "createTime": "2019-08-24T14:15:22Z",
- "decision": "for",
- "votes": {
- "for": 0,
- "against": 0,
- "abstain": 0,
- "brokerNonVote": 0,
- "withheld": 0,
- "oneYear": 0,
- "twoYears": 0,
- "threeYears": 0
}
}, - "sequenceNumber": 0,
- "votable": true,
- "fullText": "string",
- "classificationCodes": [
- "EQ",
- "HR"
], - "votingOptions": [
- "for",
- "against",
- "abstain"
], - "currentlyVotable": true,
- "withdrawTime": "2019-08-24T14:15:22Z",
- "parentProposalId": "string"
}
}, - "tally": {
- "forCount": 0,
- "againstCount": 0,
- "abstainCount": 0,
- "withholdCount": 0,
- "noActionCount": 0,
- "validAt": "2019-08-24T14:15:22Z"
}, - "isNewToPlatform": true,
- "headline": "string"
}
}
Returns a list of all poll tags, including the poll tag identifier and the title.
pageSize | integer (PageSize) [ 1 .. 100 ] Default: 50 The maximum number of elements to return. |
nextPageToken | string Passing a nextPageToken will cause the next page of results to be retrieved. |
{- "tags": [
- {
- "id": "string",
- "title": "string"
}
], - "nextPageToken": "string"
}
Fund manager votes are the votes placed by fund managers relating to a proposal.
As a convenience the API allows the listing of fund manager votes related to a ballot.
There may be multiple fund manager votes for a ballot since a ballot may exist due to the ownership of a non-composite instrument by multiple funds which the investor has in their account composition.
There may also be no fund manager votes for a ballot in the following cases:
habitatId required | string The habitat identifier. |
investorId required | string The investor identifier. |
ballotId required | string The ballot identifier. |
{- "fundManagerVotes": [
- {
- "id": "string",
- "fundManagerId": "string",
- "proposalId": "string",
- "generalMeetingId": "string",
- "organizationId": "string",
- "isins": [
- "string"
], - "instruction": "for",
- "rationale": "string"
}
], - "fundManagers": [
- {
- "id": "string",
- "title": "string",
- "websiteUrl": "string",
- "logoUrl": "string",
- "logoThumbnailUrl": "string"
}
]
}
Fund manager votes are the votes placed by fund managers relating to a proposal.
As a convenience the API allows the listing of fund manager votes for a list of proposals based on the fund managers of instruments in the latest composition of this account.
There may be multiple fund manager votes for a proposal because the user might have multiple fund managers managing instruments in their account and many of these fund managers might have voted.
There may also be no fund manager votes in the following cases:
habitatId required | string The habitat identifier. |
investorId required | string The investor identifier. |
accountId required | string The account identifier. |
proposalIds required | Array of strings The ids of the proposals fund manager votes are wanted for. |
{- "proposalIds": [
- "string"
]
}
{- "fundManagerVotes": [
- {
- "id": "string",
- "fundManagerId": "string",
- "proposalId": "string",
- "generalMeetingId": "string",
- "organizationId": "string",
- "isins": [
- "string"
], - "instruction": "for",
- "rationale": "string"
}
], - "fundManagers": [
- {
- "id": "string",
- "title": "string",
- "websiteUrl": "string",
- "logoUrl": "string",
- "logoThumbnailUrl": "string"
}
]
}
Returns a list of fund managers, including the information available on each one. Without any pagination parameters, a maximum of 50 fund managers will be returned.
If information is required for a list of specific fund managers, the ids
query parameter may be used to define a filter for the response such that only fund managers matching the query parameter will be included. For example:
/fundManagers?ids=1cb935ce-b361-4a02-b68e-8a717e2fd653,c54ada83-a5fa-427f-ab57-3494582b534e
The request returns only fund managers for which a match can be found, and which the API client has access. Any duplicate fund managers are returned just once. The order of fund managers returned is not determined by the filters.
ids | Array of strings A comma separated list of fund manager ids. |
pageSize | integer (PageSize) [ 1 .. 100 ] Default: 50 The maximum number of elements to return. |
nextPageToken | string Passing a nextPageToken will cause the next page of results to be retrieved. |
{- "fundManagers": [
- {
- "id": "string",
- "title": "string",
- "websiteUrl": "string",
- "logoUrl": "string",
- "logoThumbnailUrl": "string"
}
], - "nextPageToken": "string"
}
Returns the fund manager based on its identifier.
fundManagerId required | string An identifier of the fund manager for which information is required. |
{- "id": "string",
- "title": "string",
- "websiteUrl": "string",
- "logoUrl": "string",
- "logoThumbnailUrl": "string"
}