Spiko Portfolio API
The Portfolio API from Spiko — 2 operation(s) for portfolio.
The Portfolio API from Spiko — 2 operation(s) for portfolio.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/spiko-portfolio-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Spiko Investor Portfolio API
version: v1
description: The Investor API allows investors to manage their accounts, view their portfolios, and perform transactions such as subscriptions and redemptions.
servers:
- url: https://investor-api.spiko.io/v1
description: Production Server
- url: https://investor-api.preprod.spiko.io/v1
description: Pre-production Server
security: []
tags:
- name: Portfolio
paths:
/portfolio/:
get:
tags:
- Portfolio
operationId: portfolio.getPortfolio
parameters:
- name: investorId
in: query
schema:
type: string
description: a Universally Unique Identifier
format: uuid
required: true
description: a Universally Unique Identifier
security:
- basicAuth: []
- oauth2: []
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
required:
- investorId
- items
properties:
investorId:
type: string
description: a Universally Unique Identifier
format: uuid
items:
type: array
items:
type: object
required:
- name
- account
- custodialAccount
- shareClassAccount
- shareClass
- totalNumberOfShares
- totalSharesAmount
- totalGainSinceStart
properties:
name:
$ref: '#/components/schemas/NonEmptyTrimmedString'
account:
type: object
required:
- id
properties:
id:
type: string
description: a Universally Unique Identifier
format: uuid
additionalProperties: false
custodialAccount:
type: object
deprecated: true
description: please now use pair `{account.id, shareClass.id}` instead
shareClassAccount:
type: object
deprecated: true
description: please now use pair `{account.id, shareClass.id}` instead
shareClass:
type: object
required:
- id
- name
- isin
properties:
id:
type: string
description: a Universally Unique Identifier
format: uuid
name:
type: string
isin:
type: string
additionalProperties: false
totalNumberOfShares:
$ref: '#/components/schemas/BigDecimal'
totalSharesAmount:
$ref: '#/components/schemas/Amount'
totalGainSinceStart:
$ref: '#/components/schemas/Amount'
additionalProperties: false
additionalProperties: false
'400':
description: The request did not match the expected schema
content:
application/json:
schema:
$ref: '#/components/schemas/HttpApiDecodeError'
'401':
description: Unauthorized
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/Unauthorized'
- $ref: '#/components/schemas/InvestorAuthenticationError'
'403':
description: Forbidden
'404':
description: NotFound
description: Get all portfolio information for a given investor
summary: Get portfolio of an investor
/portfolio/totals:
get:
tags:
- Portfolio
operationId: portfolio.getPortfolioTotals
parameters:
- name: investorId
in: query
schema:
type: string
description: a Universally Unique Identifier
format: uuid
required: true
description: a Universally Unique Identifier
- name: currency
in: query
schema:
type: string
enum:
- EUR
- USD
- GBP
- CHF
- JPY
- SGD
title: Currency code
identifier: CurrencyCode
description: a currency code among "EUR", "USD", "GBP", "CHF", "JPY", "SGD"
required: false
description: a currency code among "EUR", "USD", "GBP", "CHF", "JPY", "SGD"
security:
- basicAuth: []
- oauth2: []
responses:
'200':
description: Success
content:
application/json:
schema:
type: array
items:
type: object
required:
- accountId
- accountName
- totalBalance
- breakdown
properties:
accountId:
type: string
description: a Universally Unique Identifier
format: uuid
accountName:
type: string
totalBalance:
$ref: '#/components/schemas/NonNegativeAmount'
breakdown:
type: array
items:
$ref: '#/components/schemas/NonNegativeAmount'
additionalProperties: false
'400':
description: The request did not match the expected schema
content:
application/json:
schema:
$ref: '#/components/schemas/HttpApiDecodeError'
'401':
description: Unauthorized
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/Unauthorized'
- $ref: '#/components/schemas/InvestorAuthenticationError'
'403':
description: Forbidden
description: Get the aggregated balance per account across all share classes. The `totalBalance` is converted to a single currency (defaults to EUR, unless all active positions share a single other currency). The `breakdown` gives the native balance per currency before conversion.
summary: Get aggregated portfolio totals
components:
schemas:
NonNegativeAmount:
type: object
required:
- value
- currency
properties:
value:
type: string
title: non-negative decimal number as a string
description: a string representation of a non-negative decimal number e.g. "10000", "0.00" or "3420.92"
currency:
type: string
enum:
- EUR
- USD
- GBP
- CHF
- JPY
- SGD
title: Currency code
identifier: CurrencyCode
description: a currency code among "EUR", "USD", "GBP", "CHF", "JPY", "SGD"
additionalProperties: false
title: Non-Negative Amount
HttpApiDecodeError:
type: object
required:
- issues
- message
- _tag
properties:
issues:
type: array
items:
$ref: '#/components/schemas/Issue'
message:
type: string
_tag:
type: string
enum:
- HttpApiDecodeError
additionalProperties: false
description: The request did not match the expected schema
BigDecimal:
type: string
description: a string to be decoded into a BigDecimal
Amount:
type: object
required:
- value
- currency
properties:
value:
type: string
title: decimal number as a string
description: a string representation of a decimal number e.g. "10000", "0.00" or "-7432092.04"
currency:
type: string
enum:
- EUR
- USD
- GBP
- CHF
- JPY
- SGD
title: Currency code
identifier: CurrencyCode
description: a currency code among "EUR", "USD", "GBP", "CHF", "JPY", "SGD"
additionalProperties: false
InvestorAuthenticationError:
type: object
required:
- reason
- _tag
properties:
reason:
type: string
_tag:
type: string
enum:
- InvestorAuthenticationError
additionalProperties: false
description: Authentication Error
NonEmptyTrimmedString:
type: string
description: a non empty string
title: nonEmptyString
pattern: ^\S[\s\S]*\S$|^\S$|^$
minLength: 1
Issue:
type: object
required:
- _tag
- path
- message
properties:
_tag:
type: string
enum:
- Pointer
- Unexpected
- Missing
- Composite
- Refinement
- Transformation
- Type
- Forbidden
description: The tag identifying the type of parse issue
path:
type: array
items:
$ref: '#/components/schemas/PropertyKey'
description: The path to the property where the issue occurred
message:
type: string
description: A descriptive message explaining the issue
additionalProperties: false
description: Represents an error encountered while parsing a value to match the schema
Unauthorized:
$id: /schemas/void
title: Unauthorized
PropertyKey:
anyOf:
- type: string
- type: number
- type: object
required:
- _tag
- key
properties:
_tag:
type: string
enum:
- symbol
key:
type: string
additionalProperties: false
description: an object to be decoded into a globally shared symbol
securitySchemes:
basicAuth:
type: http
scheme: basic
description: Use your API client_id as username and client_secret as password.
oauth2:
type: oauth2
flows:
authorizationCode:
authorizationUrl: https://investor-auth.spiko.io/oauth2/auth
tokenUrl: https://investor-auth.spiko.io/oauth2/token
scopes:
offline: Required for obtaining a refresh token