Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
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.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/arch-labs-investing-entities-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no email required.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Arch Client Accounts Investing Entities API
version: 0.1.0
description: "# Arch Client API Documentation\n\n## Getting Started\n\nTo get started, you need to request credentials from us at [api-support@arch.co](mailto:api-support@arch.co).\n\nWe'll send you a secret link with the following information\n- a Client ID\n- a Client Secret\n\n<table>\n\n<tr>\n<td>\n\n### Authentication\n\nTo authenticate, you'll need to make a POST request to the\n[`/client-api/auth/token`](#/Authentication/post_client_api_v0_auth_token) endpoint. Include your Client ID and Client Secret\nin the appropriate fields in the request body.\n\nUsing [curl](https://curl.se/), that request might look like this:\n\n**You should store and reuse this token for as long as it's valid.**\n\nYou can find the expiration time by decoding the [JWT](https://jwt.io/introduction), and checking the `exp` field, which is the expiration time represented as seconds since the Unix Epoch.\n\n</td>\n<td>\n\n```\nCLIENT_ID='<your client id>'\nCLIENT_SECRET='<your client secret>'\ncurl \\ \n -X 'POST' \\\n -H 'accept: application/json' \\\n -H 'Content-Type: application/json' \\\n -d \"{ \\\n \\\"clientId\\\": \\\"$CLIENT_ID\\\", \\\n \\\"clientSecret\\\": \\\"$CLIENT_SECRET\\\" \\\n }\" \\\n 'https://arch.co/client-api/v0/auth/token'\n```\n\n</td>\n</tr>\n\n</table>\n\n\n<table>\n<tr>\n\n<td>\n\n### Querying\n\nOnce you have an access token, you can query the API as described below. The\nauthorization header should include your Access Token, prefixed by the word\n\"Bearer\". (e.g. `authorization: Bearer tokendata...`)\n\nHere's an example with curl.\n</td>\n\n<td>\n\n```\nACCESS_TOKEN='<access token from the previous step>'\ncurl -X 'GET' \\\n 'https://arch.co/client-api/v0/holdings' \\\n -H 'accept: application/json' \\\n -H \"authorization: Bearer $ACCESS_TOKEN\"\n```\n\n</td>\n\n</tr>\n</table>\n\n<table>\n<tr>\n<td>\n\n### Rate Limit\n\nThe Arch Client API is rate limited, measured in requests per minute. If you hit this limit, you will get an error 429 - Too Many Requests.\nTo address this, consider spacing out your requests.\n\nTo check your API user's rate limit status, view the response headers on an API request. The headers are as follows:\n\n* #### RateLimit-Policy\n The max number of requests allowed over a specified window of time. Format: [number of requests];w=[window of time in seconds]\n\n* #### RateLimit-Limit\n The max number of requests allowed over the current window of time. Format: [number of requests]\n\n* #### RateLimit-Remaining\n The remaining number of requests that the user is allowed to make over the current window of time. Format: [number of requests]\n\n* #### RateLimit-Reset\n The number of seconds remaining until the window of time resets. Format: [number of seconds]\n\n</tr>\n</td>\n</table>\n\n## Pages\n\nMany Arch objects can be returned in lists called Pages. By default, a Page\ncontains up to 25 objects. Some endpoints allow the user to increase the\nnumber of requested objects up to 1000.\n\n## Concepts\n\n<table>\n\n<tr>\n<td>\n\n### Users\nAn individual's personal access to Arch.\n\n### Accounts\nRepresents a collection of investments, which users are assigned to.\n\n### Holdings\n\nHoldings are investments, or any other piece of property (real estate, real assets, bank accounts, etc.). Each holding represents a\nrelationship between an Investing Entity and an Issuing Entity, where the\nInvesting Entity has invested in one of the Offerings that the Issuing Entity\noffers.\n\n * #### Edge Cases\n Sometimes, a holding may not directly represent one of your investments. For example, there might be a holding that contains tax documents related to a charitable contribution. Holdings aren't always direct investments as well, it's not uncommon to see a holding representing a Fund -> Fund investment.\n\n### Investing Entities\n\nThese are the entities that own holdings. Arch receives and processes investments on behalf of the Investing Entity.\n\n</td>\n<td>\n<img src=\"../static/images/user.png\" />\n</td>\n</tr>\n\n\n<tr>\n\n</tr>\n\n\n\n<tr>\n<td>\n\n### Issuing Entities\n\nThese are the entities that issue holdings, which you are investing in. They issue documents and updates that Arch receives and processes. Typically, an issuing entity is PE fund, Hedge Fund, etc. We also consider banks to be issuing entities who issue bank account holdings.\n\n * #### Insights\n Insights are third party data about issuing entites powered by our partner <a href=\"https://www.preqin.com\">Preqin</a>. Insights are accessible through the corresponding issuing entity.\n### Offerings\n\nThese represent the different investing opportunities that an Issuing Entity offers. For example, Uber might offer both a Seed round, and a later Series A round of investments. That would be a singular issuing entity (Uber), with two separate offerings (Seed, Series A).\n\n</td>\n<td>\n <img src=\"../static/images/issuing.png\" />\n</td>\n</tr>\n\n<tr>\n\n<td>\n\n### Activities\n\nArch processes many types of documents and updates to your investments.\nCollectively, these updates are known as an \"Activity.\" Examples of activities\ninclude events like:\n- Account Statement Received\n- Capital Call Requested/Paid\n- Distribution Notice/Paid\n- Investor Letter\n\nWe process these activities and extract various finanicial facts about your activities. Examples of these finanical facts are:\n\n- Total Value (Capital Account)\n- Total Contribution\n- Total Distribution\n\n### Cash Flows\n\nThese represent money flowing into or out of your investments. For example, capital calls or distributions. One cash flow can be related to one or more activities.\nOne cashflow can also be related to one or more \"allocations.\" \n\nEach cash flow is also linked to one or more \"allocations,\" which represent the specific movement of money. An allocation has a specific type and describes an event initiated by the LP or GP. Each allocation has a direction: -1 (indicating cash flowing into the investment), 1 (indicating cash flowing out), or infrequently, 0 (no cash movement). The sum of the products of each allocation times its direction equals the total cash flow between the LP and the investment. These allocations can impact an investment's total value, contribution, remaining commitment, and distribution.\n\nTypes of allocations include:\n\n- Capital Calls\n- Expenses\n- Cash Distributions\n- Expenses\n\n#### Point in Time Valuation vs. Estimated Value\n\nPoint in time valuation and estimated value report the value of an investment at different times. Point in time valuation returns the value of an investment exactly as reported on the most recent statement, while estimated value starts with the most recent statement value and adjusts according to the capital calls that have occurred since the date of the most recent statement.\n\n### Tasks\n\nA specific investment related action that the user must complete. For example, confirming a new investment or verifying wire instructions.\n\n</td>\n<td>\n <img src=\"../static/images/cashflow.png\" />\n</td>\n\n</tr>\n</table>\n\n<table>\n\n<td>\n\n### Lookthroughs\n\n**Premium Feature:** Arch can track and display the <u title=\"An SOI returns a list of your investments, including metrics such as number of shares, fair value, and liquidity.\">schedule of investments (SOI)</u> for any holdings you\nown. This allows you to \"look through\" the holdings you own to the\ninvestments that your holding made. This can make it easier to track your\n\"true\" exposure.\n\n### User Roles\n\nYou grant access to accounts, investing entities, and holdings with user roles. Each role grants a specific set of permissions.\n\n**Available role types for POST and DELETE requests:**\n- Full Access\n- Tax Only\n- Restricted Tax Only\n- View Only\n- File Only\n- Informed Tax Only\n- View Only with Task Completion\n- Restricted Investor\n- Investment Team\n\n**Note:** GET requests may return additional universal and custom role types beyond those listed above, depending on your Arch configuration.\n\nFor more information about permissions associated with roles, please refer to [Arch Permissions by User Type](https://intercom.help/archhelp/en/articles/8975969-arch-permissions-by-user-type).\n\n## Standards\n\n### Time Zone\n\nDates and times are in UTC unless otherwise specified.\n\n</td>\n\n</table>\n"
servers:
- url: /
host: arch.co
tags:
- name: Investing Entities
description: Read from and create new investing entities
paths:
/client-api/v0/investing-entities:
get:
summary: Get all investing entities accessible to the user
parameters:
- name: accountIds
in: query
example: 1,2,3,4
description: Will filter the output to only include holdings relevant to one of the account ids in the provided argument
schema:
type: string
security:
- BearerAuth: []
description: Returns a list of all investing entities available to the user determined by the access token.
tags:
- Investing Entities
responses:
'200':
description: A list of investing entity data.
content:
application/json:
schema:
$ref: '#/components/schemas/InvestingEntityList'
'500':
description: Internal server error.
post:
summary: Add a new investing entity to Arch
security:
- BearerAuth: []
description: Creates a new investing entity and returns the URL, if successful.
tags:
- Investing Entities
requestBody:
description: Details of the new investing entity to create.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/NewInvestingEntity'
responses:
'201':
description: Created
headers:
Location:
schema:
type: string
description: URL of the new investing entity
'500':
description: Internal server error.
/client-api/v0/investing-entities/{id}:
get:
operationId: get-single-investing-entity
summary: Get info about one investing entity
security:
- BearerAuth: []
description: Returns details about a single investing entity.
tags:
- Investing Entities
parameters:
- name: id
in: path
description: A specific investing entity to query
required: true
schema:
type: integer
minimum: 1
responses:
'200':
description: Details about a single investing entity.
content:
application/json:
schema:
$ref: '#/components/schemas/InvestingEntity'
'500':
description: Internal server error.
/client-api/v0/investing-entities/{id}/holdings:
get:
summary: Get data for a set of holdings under an investing entity
security:
- BearerAuth: []
description: Returns a paginated list of holdings data under an investing entity.
tags:
- Investing Entities
parameters:
- name: id
in: path
description: A specific investing entity to query holdings for
required: true
schema:
type: integer
minimum: 1
- name: limit
in: query
description: The number of holdings to return
schema:
type: integer
default: 25
maximum: 1000
- name: offset
in: query
description: The number of holdings to skip before collecting results
schema:
type: integer
default: 0
minimum: 0
responses:
'200':
description: A list of holdings data for an investing entity.
content:
application/json:
schema:
$ref: '#/components/schemas/HoldingList'
'400':
description: Invalid request parameters.
'500':
description: Internal server error.
components:
schemas:
InvestmentLinkStatus:
type: string
enum:
- Authorization Required
- Contact Info Required
- Pending External Action
- Additional Authorization Required
- In Progress
- Linked
- Linked Confirmed
- Linking Under Review
- Linked Confirmed
- Pass-Through Linked
- Unlinked
- Linking Unavailable
- Awaiting DocuSign
FinancialValue:
type: object
properties:
quantity:
type: integer
format: int64
description: The quantity of the financial value
example: 100000
currencyCode:
$ref: '#/components/schemas/CurrencyCode'
dollars:
type: integer
format: int64
description: The financial value in dollars
example:
quantity: 100000
currencyCode: USD
dollars: 100000
Timestamp:
type: string
format: YYYY-MM-DDTHH:mm:ss.SSSZ
InvestingEntityRef:
type: object
required:
- kind
- id
- url
properties:
kind:
type: string
enum:
- investing-entity-ref
id:
type: number
description: The ID of the referenced investing entity
example: 711
url:
type: string
description: A relative url to the referenced investing entity
example: /investing-entities/711
name:
type: string
description: The name of the referenced investing entity
example: Investing Entity 711
IssuingEntityRef:
type: object
required:
- kind
- id
- url
properties:
kind:
type: string
enum:
- issuing-entity-ref
id:
type: number
description: The ID of the referenced issuing entity
example: 204
url:
type: string
description: A relative url to the referenced issuing entity
example: /issuing-entities/204
name:
type: string
description: The name of the referenced issuing entity
example: Issuing Entity 204
AccountRef:
type: object
required:
- kind
- id
- url
properties:
kind:
type: string
enum:
- account-ref
id:
type: number
description: The ID of the referenced account
example: 56
url:
type: string
description: A relative url to the referenced account
example: /account/56
name:
type: string
description: The name of the referenced account
example: Account 56
WireInstructions:
type: object
description: Instructions for how to wire an investing entity
properties:
bankName:
type: string
description: The name of the bank
bankAddress:
type: string
description: The full bank address
accountName:
type: string
description: The bank account name
accountType:
type: string
description: The type of account, e.g. "Checking", "Savings"
routingNumber:
type: string
description: The ABA routing number
wireReference:
type: string
bic:
type: string
description: A Business Identifier Code for wiring
iban:
type: string
description: An International Bank Account Number for wiring
sortCode:
type: string
description: A six-digit number predominantly used by banks in the UK
contactName:
type: string
contactNumber:
type: string
description: The digit-only phone number of the contact
example:
bankName: Bank Name
bankAddress: Address St, County, NY 10010
accountName: Account Name
accountType: Checking
accountNumber: '000100'
routingNumber: '000010200'
wireReference: Reference Name LLC
bic: DEUTDEFF
iban: GB82 WEST 1234 5698 7654 32
sortCode: '123456'
contactName: Mario Mario
contactNumber: '1234567890'
OfferingRef:
type: object
required:
- kind
- id
- url
properties:
kind:
type: string
enum:
- offering-ref
id:
type: number
description: The ID of the referenced offering
example: 112
url:
type: string
description: A relative url to the referenced offering
example: /offerings/112
name:
type: string
description: The name of the referenced offering
example: Offering 112
CustomField:
type: object
description: A user-specified custom field. Does not yet support File fields.
properties:
name:
type: string
fieldType:
type: string
enum:
- TEXT
- SELECT
- NUMBER
- CHECKBOX
- DATE
- FILES
- FINANCIAL_VALUE
value:
oneOf:
- type: string
- type: number
- type: boolean
- $ref: '#/components/schemas/FinancialValue'
Holding:
type: object
required:
- kind
- id
- selfUrl
- name
- investingEntityName
- investingEntityRef
- investingEntityUrl
- offeringRef
- offeringUrl
- archEmail
properties:
kind:
type: string
description: Holding
id:
type: number
description: The Arch ID for tracking the holding
selfUrl:
type: string
description: The relative URL for accessing this resource via the Arch Client API
name:
type: string
description: The name for the holding
isTaxPlaceholder:
type: boolean
description: If this holding is a placeholder for an expected tax document
investingEntityRef:
$ref: '#/components/schemas/InvestingEntityRef'
investingEntityName:
type: string
description: The name of the entity that owns the holding
investingEntityUrl:
type: string
description: The relative path to query for the entity that owns the holding
issuingEntityRef:
$ref: '#/components/schemas/IssuingEntityRef'
accountName:
type: string
description: The name of the account that owns the holding
accountRef:
$ref: '#/components/schemas/AccountRef'
accountUrl:
type: string
description: The relative path to query the related Account if any
example: /accounts/56
issuingEntityName:
type: string
description: The name of the entity that issues documents for the holding
issuingEntityUrl:
type: string
description: The relative path to query for the entity that issues documents for the holding
offeringRef:
$ref: '#/components/schemas/OfferingRef'
offeringUrl:
type: string
description: The relative path to query for the vehicle that was invested in
archEmail:
type: string
description: A unique Arch email that receives documents and updates for the holding
linkStatus:
$ref: '#/components/schemas/InvestmentLinkStatus'
description: The status of the linking process for the investment.
startDate:
type: string
format: date
description: The date the holding began (YYYY-MM-DD)
endDate:
type: string
format: date
description: The date the holding ends (YYYY-MM-DD)
firmName:
type: string
description: The name of the firm this holding is associated with
firmRef:
$ref: '#/components/schemas/FirmRef'
financials:
type: object
description: Current financial values for the holding
properties:
valueAsOfTime:
allOf:
- $ref: '#/components/schemas/Timestamp'
- description: The timestamp of the most recent valuation
capitalAccount:
allOf:
- $ref: '#/components/schemas/FinancialValue'
- description: Total value of the holding
initialCommitment:
allOf:
- $ref: '#/components/schemas/FinancialValue'
- description: Total commitment to the holding
totalContribution:
allOf:
- $ref: '#/components/schemas/FinancialValue'
- description: Total of any contributions made towards the commitment (For lookthroughs, this is analogous to cost-basis)
outstandingCommitment:
allOf:
- $ref: '#/components/schemas/FinancialValue'
- description: Total contributions required to meet the commitment
totalDistributions:
allOf:
- $ref: '#/components/schemas/FinancialValue'
- description: Total of any distributions made from the holding
recallableDistributions:
allOf:
- $ref: '#/components/schemas/FinancialValue'
- description: Total of any distributions made from the holding that can be recalled
investedCapital:
allOf:
- $ref: '#/components/schemas/FinancialValue'
- description: Total capital invested in the underlying asset (Lookthroughs only)
transferInfo:
type: array
description: 'The transfer relationships this holding is involved in. Only returned when the
includeTransferInfo query parameter is set to true. A holding can be involved
in many transfers, both into it and out of it, so this list may contain any
number of entries (empty when the holding was not involved in any transfer).
In each entry, one of the two holding refs is a self-reference to this holding.
Transfers involving a holding the caller cannot access are omitted.
'
items:
type: object
properties:
transferorHoldingRef:
allOf:
- $ref: '#/components/schemas/HoldingRef'
- description: The holding that was transferred from
transfereeHoldingRef:
allOf:
- $ref: '#/components/schemas/HoldingRef'
- description: The holding that was transferred to
transferDate:
type: string
format: date
description: 'The date the transfer took place. Resolved as the transferor holding''s
end date, falling back to the transferee holding''s start date, then null.
'
latestStatementRef:
type: object
description: Reference to the most recent statement activity for this holding to help reconcile valuations
properties:
id:
type: number
description: The activity ID
url:
type: string
description: Relative URL to the activity
activityType:
type: string
description: The type of statement activity (e.g., "Account Statement Received")
statementDate:
type: string
format: date
description: The statement date
activitiesSinceStatementUrl:
type: string
description: Relative URL to query all activities that occurred after this statement date for this holding
contact:
type: object
description: Contact information for the holding
properties:
name:
type: string
description: Contact's name
email:
type: string
description: Contact's email
phone:
type: string
description: Contact's phone number
metrics:
type: object
description: Metrics of the holding's financial performance
properties:
irr:
type: number
tvpi:
type: number
dpi:
type: number
blackDiamondInfo:
type: object
properties:
symbol:
type: string
description: The symbol of the holding
accountNumber:
type: string
description: The account number of the holding
contraAccountNumber:
type: string
description: The contra account number of the holding
assetName:
type: string
description: The name of the asset
accountName:
type: string
description: The name of the account
addeparInfo:
type: object
properties:
accountId:
type: number
description: The addepar account ID associated with this holding
ownerEntityId:
type: number
description: The addepar ID of the owner entity for this holding
ownerEntityName:
type: string
description: The name of the owner entity for this holding
ownedEntityId:
type: number
description: The addepar ID of the owned entity for this holding
ownedEntityName:
type: string
description: The name of the owned entity for this holding
positionId:
type: number
description: The id of the addepar position for this holding
integrations:
type: object
properties:
archwayInfo:
type: object
properties:
investmentId:
type: number
description: The Arch ID for tracking the holding
archwaySecurityType:
type: object
properties:
id:
type: number
description: Security Type Id
description:
type: string
description: Security Type Description
archwayProductId:
type: string
description: Archway ID for tracking the holding
archwayPortfolioId:
type: number
description: Archway ID for tracking the portfolio
burgissInfo:
type: object
properties:
investmentId:
type: number
description: The Arch ID for tracking the holding
currentIdentifier:
type: string
description: The customized identifier added for the holding in Burgiss
accountNumber:
type: number
description: The Burgiss ID for tracking the Burgiss account
investmentGuid:
type: string
description: The Burgiss ID for tracking the holding
tamaracInfo:
type: object
properties:
investmentId:
type: number
description: The Arch ID for tracking the holding
accountNumber:
type: string
description: Tamarac ID for tracking the Tamarac account
symbol:
type: string
description: Tamarac ID for tracking the holding
orionInfo:
type: object
properties:
exclusionReason:
type:
- string
- 'null'
description: Export exclusion reason (MANUALLY_DISABLED or null)
ticker:
type: string
description: Product ticker for Orion
accountNumber:
type: string
description: Orion account number
accountId:
type: string
description: Orion account ID
assetId:
type: string
description: Orion asset ID
initialCommitmentCents:
type: number
description: Initial commitment amount in cents
initialCommitmentDate:
type: string
format: date
description: Initial commitment date (YYYY-MM-DD)
ownership:
type: object
properties:
percentage:
type: number
description: the whole number percent ownership the caller has in the holding.
issuingEntityId:
type: number
description: the ID of the issuing entity that contains the underlying portfolio companies.
issuingEntityUrl:
type: string
description: the url to access the issuing entity that contains the underlying portfolio companies. Prepopulated with the query parameter required to fetch the underlying portfolio.
customFields:
type: object
description: A map from custom field ID to custom field data.
additionalProperties:
$ref: '#/components/schemas/CustomField'
example:
kind: holding
id: 50051
selfUrl: /holdings/50051
name: Arch Example Holding
isTaxPlaceholder: false
investingEntityRef:
kind: investing-entity-ref
id: 56
url: /investing-entities/56
name: Arch Example Issuer
investingEntityName: Arch Example Investor
investingEntityUrl: /investingEntities/56
issuingEntityRef:
kind: issuing-entity-ref
id: 420
url: /issuing-entities/420
name: Arch Example Issuer
issuingEntityName: Arch Example Issuer
issuingEntityUrl: /issuingEntities/420
offeringRef:
kind: offering-ref
id: 112
url: /offerings/112
name: Offering 112
offeringUrl: /offerings/112
accountName: Arch Example Account
accountRef:
kind: account-ref
id: 56
url: /accounts/56
name: Account 56
accountUrl: /accounts/56
archEmail: exampleinvestor-exampleissuer@archdocuments.com
startDate: '2023-01-19T00:00:00.000Z'
endDate: '2023-01-19T00:00:00.000Z'
firmName: Firm Name 1
firmRef:
kind: firm-ref
id: 42
url: /firms/42
name: Firm Name 1
financials:
capitalAccount:
quantity: 2000
currencyCode: USD
dollars: 2000
valueAsOfTime: 2024-02-26H00:00:00.000Z
initialCommitment:
quantity: 2000
currencyCode: USD
dollars: 2000
totalContribution:
quantity: 2000
currencyCode: USD
dollars: 2000
outstandingCommitment:
quantity: 2000
currencyCode: USD
dollars: 2000
totalDistributions:
quantity: 2000
currencyCode: USD
dollars: 2000
recallableDistributions:
quantity: 2000
currencyCode: USD
dollars: 2000
latestStatementRef:
id: 12345
url: /activities/12345
activityType: Account Statement Received
statementDate: '2025-06-30T00:00:00.000Z'
activitiesSinceStatementUrl: /activities?&holdingIds=50051&afterProcessedAt=2025-06-30T00:00:00.000Z
InvestingEntity:
type: object
required:
- kind
- id
- selfUrl
- accountUrl
properties:
kind:
type: string
description: investing-entity
# --- truncated at 32 KB (40 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/arch-labs/refs/heads/main/openapi/arch-labs-investing-entities-api-openapi.yml