Equity Rank Portfolio API
The portfolio API from Equity Rank — 6 operation(s) for portfolio.
The portfolio API from Equity Rank — 6 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/equity-rank-com:equity-rank-com-portfolio-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
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: Equity Rank Com Portfolio API
version: 0.1.0
description: 'Operations tagged portfolio across 2 of this provider''s published API definitions: openapi.json, equity-rank-com-openapi.yml. Each path carries the servers of the definition it was published in.'
tags:
- name: Portfolio
paths:
/api/portfolio/analyze:
post:
tags:
- Portfolio
summary: Analyze Portfolio
description: 'Score a list of tickers from the screener_cache.
Unauthenticated callers receive score + basic info only.
Authenticated callers receive the full screener row.'
operationId: analyze_portfolio_api_portfolio_analyze_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AnalyzeRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
additionalProperties: true
type: object
title: Response Analyze Portfolio Api Portfolio Analyze Post
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/portfolio/save-watchlist:
post:
tags:
- Portfolio
summary: Save To Watchlist
description: 'Bulk-add a list of tickers to the authenticated user''s watchlist.
Silently skips duplicates (upsert semantics).
Returns added count and any tickers that failed.'
operationId: save_to_watchlist_api_portfolio_save_watchlist_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SaveWatchlistRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
additionalProperties: true
type: object
title: Response Save To Watchlist Api Portfolio Save Watchlist Post
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- HTTPBearer: []
/api/portfolio/check:
post:
tags:
- Portfolio
summary: Check Holdings
description: Published model fair value + gap for each entered ticker. Public.
operationId: check_holdings_api_portfolio_check_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AnalyzeRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
additionalProperties: true
type: object
title: Response Check Holdings Api Portfolio Check Post
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/portfolio/optimize:
post:
tags:
- Portfolio
summary: Optimize Portfolio
description: 'Black-Litterman portfolio model. F&F-only v1 (legal gate).
Returns model-derived weights for holdings used as model inputs.
Not investment advice. Educational use only.'
operationId: optimize_portfolio_api_portfolio_optimize_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PortfolioOptimizeRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/PortfolioOptimizeResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- HTTPBearer: []
/api/portfolio/holdings:
get:
tags:
- Portfolio
summary: Get Holdings
description: 'Return the user''s holdings enriched with the latest cached price and model
context, plus per-position and total unrealized P&L (computed from the
user''s entered cost basis — factual tracking, not advice).'
operationId: get_holdings_api_portfolio_holdings_get
responses:
'200':
description: Successful Response
content:
application/json:
schema:
additionalProperties: true
type: object
title: Response Get Holdings Api Portfolio Holdings Get
security:
- HTTPBearer: []
post:
tags:
- Portfolio
summary: Upsert Holding
description: Add a holding, or update it if the symbol already exists for this user.
operationId: upsert_holding_api_portfolio_holdings_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/HoldingRequest'
required: true
responses:
'201':
description: Successful Response
content:
application/json:
schema:
additionalProperties: true
type: object
title: Response Upsert Holding Api Portfolio Holdings Post
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- HTTPBearer: []
/api/portfolio/holdings/{symbol}:
patch:
tags:
- Portfolio
summary: Update Holding
description: Update an existing holding's shares, cost basis, or notes.
operationId: update_holding_api_portfolio_holdings__symbol__patch
security:
- HTTPBearer: []
parameters:
- name: symbol
in: path
required: true
schema:
type: string
title: Symbol
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/HoldingUpdate'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: object
additionalProperties: true
title: Response Update Holding Api Portfolio Holdings Symbol Patch
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
delete:
tags:
- Portfolio
summary: Delete Holding
description: Remove a holding from the user's portfolio.
operationId: delete_holding_api_portfolio_holdings__symbol__delete
security:
- HTTPBearer: []
parameters:
- name: symbol
in: path
required: true
schema:
type: string
title: Symbol
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: object
additionalProperties: true
title: Response Delete Holding Api Portfolio Holdings Symbol Delete
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
components:
schemas:
AnalyzeRequest:
properties:
tickers:
items:
type: string
type: array
title: Tickers
type: object
required:
- tickers
title: AnalyzeRequest
PortfolioOptimizeResponse:
properties:
holdings_used:
type: integer
title: Holdings Used
weights:
items:
additionalProperties: true
type: object
type: array
title: Weights
portfolio_stats:
additionalProperties: true
type: object
title: Portfolio Stats
disclaimer:
type: string
title: Disclaimer
cache_age_minutes:
type: integer
title: Cache Age Minutes
type: object
required:
- holdings_used
- weights
- portfolio_stats
- disclaimer
- cache_age_minutes
title: PortfolioOptimizeResponse
HTTPValidationError:
properties:
detail:
items:
$ref: '#/components/schemas/ValidationError'
type: array
title: Detail
type: object
title: HTTPValidationError
SaveWatchlistRequest:
properties:
tickers:
items:
type: string
type: array
title: Tickers
type: object
required:
- tickers
title: SaveWatchlistRequest
HoldingUpdate:
properties:
shares:
anyOf:
- type: number
- type: 'null'
title: Shares
cost_basis:
anyOf:
- type: number
- type: 'null'
title: Cost Basis
notes:
anyOf:
- type: string
- type: 'null'
title: Notes
type: object
title: HoldingUpdate
ValidationError:
properties:
loc:
items:
anyOf:
- type: string
- type: integer
type: array
title: Location
msg:
type: string
title: Message
type:
type: string
title: Error Type
input:
title: Input
ctx:
type: object
title: Context
type: object
required:
- loc
- msg
- type
title: ValidationError
HoldingRequest:
properties:
symbol:
type: string
title: Symbol
shares:
type: number
title: Shares
cost_basis:
type: number
title: Cost Basis
notes:
anyOf:
- type: string
- type: 'null'
title: Notes
type: object
required:
- symbol
- shares
- cost_basis
title: HoldingRequest
PortfolioOptimizeRequest:
properties:
tickers:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Tickers
positions:
anyOf:
- items:
additionalProperties: true
type: object
type: array
- type: 'null'
title: Positions
type: object
title: PortfolioOptimizeRequest
securitySchemes:
HTTPBearer:
type: http
scheme: bearer
x-refined-from:
- openapi.json
- equity-rank-com-openapi.yml