FinChat Partner Portal

Organization Settings

Organization Name

This option allows you to set or update your organization's name. The name provided here will be used consistently across the system, ensuring uniform identification and branding.

Users

This section provides control over the user accounts associated with your organization. It includes functionality for creating, updating and deleting access for those users.

Domains

his feature provides control over domain-based access, ensuring that only authorized domains can interact with or access your organization's resources.

API & Embed Keys

API Key

The API Key is used to authenticate requests to the FinChat API and to generate JWT tokens to authenticate users. It is important that it is kept secret.

Embed Key

The embed key is used to embed the FinChat widget on your application.

<iframe src="https://enterprise.finchat.io/YOUR_WIDGET_KEY" width="100%" height="500" style={{ border: 'none' }} />

Credentials

Pinecone Credentials

These credentials give you access to the Pinecone vector database, which is used to power the FinChat API. You can find more information about Pinecone here.

URL

API Key and Environment

OpenAI/Azure Credentials

Azure API Key

In order to securely access and interact with Azure services through our software, an Azure API key is required. This key serves as a unique authentication token, ensuring authorized and controlled access to the designated Azure resources.

OpenAI API Key

An OpenAI API key is required for accessing and utilizing OpenAI's advanced AI models. This key acts as a unique identifier that grants permission and tracks usage.

Models

We provide different model options to align with varied user needs, ensuring the right balance between performance, content length handling, and advanced capabilities for each specific use case.

  • GPT-3.5-Turbo: Designed for efficiency and cost-effectiveness, ideal for applications that require rapid response times. Its optimized performance makes it suitable for interactive user interfaces and real-time applications, while still delivering the high-quality outputs expected of GPT-3.5.
  • GPT-3.5-Turbo-16k: Extending the capabilities of GPT-3.5-Turbo, the 16k variant specializes in processing extended text inputs up to 16,000 tokens. This makes it highly effective for comprehensive document analysis, extensive customer interactions, and applications where detailed context is critical.
  • GPT-4: It excels in complex problem-solving, nuanced language understanding, and sophisticated task execution, making it the preferred choice for enterprises seeking cutting-edge AI solutions.

Expected Fields

  • Requests per Minute: This is the maximum number of API requests that can be made to the service within one minute. It is a measure of the rate at which you can send requests to the API.
  • Tokens per Minute: The total number of tokens (pieces of text) that can be processed by the API in one minute. It is important for understanding how much content you can analyze or generate in a given timeframe.
  • Resource (Azure Only): It defines what part of Azure's cloud infrastructure your application is utilizing.
  • Deployment (Azure Only): Specifies where or how your service is deployed. It could refer to the deployment of a virtual machine, a container instance, or a specific Azure region to optimize performance and data residency.
  • Version (Azure Only): This indicates the version of the Azure service you are using. Azure frequently updates its services with new features and improvements, so specifying the version ensures compatibility and access to specific functionalities of the service.

Data Feed Settings

The Data Feed Settings section allows you to configure the data feed that will be used to power the Finchat API. You can set filters to surface relevant data for responses based on the criteria you specify.

Datasets

The portal is organized by datasets (i.e., financials, prices, transcripts, etc.) for the purpose of segmenting out different datasets so they can be ranked relative to the data points that are similar. For example you wouldn’t want a transcript snippet competing with a financial metric because the transcript snippet is much richer in context and will score better.

Each dataset incorporates a metadata field named 'type' that aligns with the dataset's title within the Portal. This metadata enables the fine-tuning of dataset relevance through boosting or penalizing. For instance, datasets can be boosted based on recency using the date field or penalized if a particular dataset, like Transcripts, appears more frequently than desired. These tools, along with the descriptions you provide, serve as the primary methods for managing response quality. Internally, we employ a blend of conventional programming and Language Learning Models (LLMs) to sort and filter results from Pinecone. This ensures that the surfaced results are pertinent, as the quality of the responses is directly linked to the quality of the datasets ingested.

To provide further clarity, it is indeed possible to have a single dataset encompassing all your data, with the 'metric' field varying to represent different data points such as price, superinvestor names, and so on. However, this approach is likely to yield suboptimal results. Best pratice is to have a separate dataset for each type of data, such as financials, prices, and transcripts.

Step by step guide to get set up with custom datasets

  1. Add the datasets in the Portal and decide on the metrics you want. For example revenue, gross profit, P/E, revenue analyst estimates, price targets, etc. Here you will also need to decide if you want to group things or split them into different datasets, i.e., display just one analyst estimates card so therefore only provide one description. You then loop over those metrics and fetch a description from our endpoint (https://api.finchat.io/description) where you can provide the model of choice (we strongly recommend GPT-4) and custom instructions which we layer on top of our own (see image below).
{
"model": "gpt-4",
"dataset": {
"title": "Stock Price",
"instructions": "You are a world class financial analyst, tasked with providing a succient yet thorough explanation for a company-specific metric. How would you explain the following metric so as to capture the essence of the metric in 2 to 3 sentences?"
}
}
  1. You can then send us one metric at a time using a POST request to https://api.finchat.io/enterprise/documents which includes the uid of the dataset (i.e., Revenue), the title of the dataset (i.e., corresponds to the dataset title in the Portal), the description you fetched or created using our endpoint, metadata fields you want attached to this metric, and lastly a list of companies for which this metric applies (i.e., name, ticker, and companyId). You will find the name, ticker, and companyId as metadata on all the vectors indexed. See below of what an example of this JSON looks like.
{
"datasets": [
{
"uid": "PE Ratio",
"title": "Valuation Ratios",
"description": "The PE Ratio, or Price-to-Earnings Ratio, is a crucial financial metric that helps investors evaluate a company's market value relative to its earnings. Simply put, it tells you how much you would have to spend to buy one dollar of a company's earnings. A high PE Ratio could suggest that the market has high expectations for a company's future growth, while a low PE Ratio might indicate that the company is undervalued. This ratio is a key tool in comparing the value of different companies within the same industry.",
"metadata": {
"ratio": "PE Ratio"
},
"companies": [
{
"name": "Apple Inc.",
"ticker": "AAPL",
"companyId": "NasdaqGS-AAPL"
},
{
"name": "Microsoft Corporation",
"ticker": "MSFT",
"companyId": "NasdaqGS-MSFT"
},
{
"name": "Alphabet Inc.",
"ticker": "GOOGL",
"companyId": "NasdaqGS-GOOGL"
},
{
"name": "Amazon.com, Inc.",
"ticker": "AMZN",
"companyId": "NasdaqGS-AMZN"
},
{
"name": "NVIDIA Corporation",
"ticker": "NVDA",
"companyId": "NasdaqGS-NVDA"
},
{
"name": "Meta Platforms, Inc.",
"ticker": "META",
"companyId": "NasdaqGS-META"
},
{
"name": "Berkshire Hathaway Inc.",
"ticker": "BRK.A",
"companyId": "NYSE-BRK.A"
},
{
"name": "Tesla, Inc.",
"ticker": "TSLA",
"companyId": "NasdaqGS-TSLA"
},
{
"name": "Visa Inc.",
"ticker": "V",
"companyId": "NYSE-V"
},
{
"name": "Eli Lilly and Company",
"ticker": "LLY",
"companyId": "NYSE-LLY"
}
]
},
{
"uid": "PS Ratio",
"title": "Valuation Ratios",
"description": "The Price-to-Sales (PS) Ratio is a valuable financial metric used to assess the value of a company. It compares a company's stock price to its revenue per share, providing an indication of the value placed on each dollar of a company's sales or revenues. In essence, a lower PS Ratio could suggest that the stock is undervalued, while a higher ratio might indicate overvaluation. This tool is particularly useful when analyzing companies with no earnings or profit.",
"metadata": {
"ratio": "PS Ratio"
},
"companies": [
{
"name": "Apple Inc.",
"ticker": "AAPL",
"companyId": "NasdaqGS-AAPL"
},
{
"name": "Microsoft Corporation",
"ticker": "MSFT",
"companyId": "NasdaqGS-MSFT"
},
{
"name": "Alphabet Inc.",
"ticker": "GOOGL",
"companyId": "NasdaqGS-GOOGL"
},
{
"name": "Amazon.com, Inc.",
"ticker": "AMZN",
"companyId": "NasdaqGS-AMZN"
},
{
"name": "NVIDIA Corporation",
"ticker": "NVDA",
"companyId": "NasdaqGS-NVDA"
},
{
"name": "Meta Platforms, Inc.",
"ticker": "META",
"companyId": "NasdaqGS-META"
},
{
"name": "Berkshire Hathaway Inc.",
"ticker": "BRK.A",
"companyId": "NYSE-BRK.A"
},
{
"name": "Tesla, Inc.",
"ticker": "TSLA",
"companyId": "NasdaqGS-TSLA"
},
{
"name": "Visa Inc.",
"ticker": "V",
"companyId": "NYSE-V"
},
{
"name": "Eli Lilly and Company",
"ticker": "LLY",
"companyId": "NYSE-LLY"
}
]
},
{
"uid": "PB Ratio",
"title": "Valuation Ratios",
"description": "The Price-to-Book (PB) Ratio is a financial metric that compares a company's current market price to its book value. Essentially, it shows how much investors are willing to pay for each dollar of a company's net assets. A lower PB Ratio could indicate that the stock is undervalued, while a higher ratio might suggest overvaluation. It's a key tool for value investors to identify potential investment opportunities.",
"metadata": {
"ratio": "PB Ratio"
},
"companies": [
{
"name": "Apple Inc.",
"ticker": "AAPL",
"companyId": "NasdaqGS-AAPL"
},
{
"name": "Microsoft Corporation",
"ticker": "MSFT",
"companyId": "NasdaqGS-MSFT"
},
{
"name": "Alphabet Inc.",
"ticker": "GOOGL",
"companyId": "NasdaqGS-GOOGL"
},
{
"name": "Amazon.com, Inc.",
"ticker": "AMZN",
"companyId": "NasdaqGS-AMZN"
},
{
"name": "NVIDIA Corporation",
"ticker": "NVDA",
"companyId": "NasdaqGS-NVDA"
},
{
"name": "Meta Platforms, Inc.",
"ticker": "META",
"companyId": "NasdaqGS-META"
},
{
"name": "Berkshire Hathaway Inc.",
"ticker": "BRK.A",
"companyId": "NYSE-BRK.A"
},
{
"name": "Tesla, Inc.",
"ticker": "TSLA",
"companyId": "NasdaqGS-TSLA"
},
{
"name": "Visa Inc.",
"ticker": "V",
"companyId": "NYSE-V"
},
{
"name": "Eli Lilly and Company",
"ticker": "LLY",
"companyId": "NYSE-LLY"
}
]
}
]
}
  1. Add endpoints where the data can be fetched, e.g., we send over a metric and companyId and expect the data back in the standard format. The code below outlines what that format looks like in TypeScript. For more information visit the structed datasets section.
export interface Dataset {
title: string
logo?: string
chartType?: 'standard' | 'area' | 'stackedBar' | 'stackedArea'
dailySlider?: boolean
toggles: {
dataLabels: boolean
decimalPlaces: boolean
currency: boolean
period: boolean
format: boolean
reverseDates: boolean
timeframe: boolean
}
defaults: {
dataLabels: boolean
decimalPlaces: number
currency: string | null
period: string
format: string
reverseDates: boolean
timeframe: string
}
options: {
decimalPlaces: number[]
currency: string[]
period: string[]
format: string[]
timeframe: ({ label: string; value: string | null } | string)[]
}
datasets: {
title: string
period: 'Annual' | 'Quarterly' | 'Semi-Annual' | 'LTM' | 'Daily'
format: 'number' | 'ratio' | '%'
currency: string | null
isCurrency: boolean
table: boolean
chart: boolean
chartType: string
data: { x: string; y: number }[]
}[]
}

Data Set Types

Text

Indexed as is, needs only a title.

  • Boost: A positive value prioritizes the importance of this document in the AI's response decision-making process. Recommended is a penalty of 0.04, given how much better text tends to score.
  • Max Docs: Limits the number of allowed uploaded documents. It is recommended to leave this field blank.

{
"datasets": [
{
"uid": "Transcript - Apple Inc. (AAPL) Q3 2023 Passage 0",
"title": "Transcripts",
"description": "Operator: Good day, and welcome to the Apple Q3\n\nFiscal Year 2023 Earnings Conference Call.\n\nToday's call is being recorded.\n\nAt this time, for opening remarks and introductions, I would like to turn the call over to Saori Casey, Vice President of Finance.\n\nPlease go ahead.\n\
\nSaori Casey: Thank you.\n\nGood afternoon, and thank you for joining us.\n\nSpeaking first today is Apple's CEO, Tim Cook; and he'll be followed by CFO, Luca Maestri.\n\nAfter that, we'll open the call to questions from analysts.\n\nPlease note that some of the information you'll hear during our discussion today will consist of forward-looking statements, including, without limitation, those regarding revenue, gross margin, operating expenses, other income and expense, taxes, capital allocation and future business outlook, including the potential impact of macroeconomic conditions on the company's business and the results of operations.",
"metadata": {
"title": "Transcript - Apple Inc. (AAPL) Q3 2023"
},
"companies": []
},
{
"uid": "Transcript - Apple Inc. (AAPL) Q3 2023 Passage 1",
"title": "Transcripts",
"description": "These statements involve risks and uncertainties that may cause actual results or trends to differ materially from our forecast.\n\nFor more information, please refer to the risk factors discussed in Apple's most recently filed annual report on Form 10-K and the Form 8-K filed with the SEC today, along with the associated press release.\n\nApple assumes no obligation to update any forward-looking statements, which speak only as of the date they are made.\n\nI'd now like to turn the call over to Tim for introductory remarks.\n\
\nTim Cook: Thank you, Saori.\n\nGood afternoon, everyone, and thanks for joining us.\n\nToday, Apple is reporting revenue of $81.8 billion for the June quarter, better than our expectations.\n\nWe continued to see strong results in emerging markets, driven by robust sales of iPhone with June quarter total revenue records in India, Indonesia, Mexico, the Philippines, Poland, Saudi Arabia, Turkey and the UAE.",
"metadata": {
"title": "Transcript - Apple Inc. (AAPL) Q3 2023"
},
"companies": []
},
...
]
}

Non-Text

Description is indexed and requires an API endpoint to hydrate. In order to secure these endpoints see the Security section.

{
"datasets": [
{
"uid": "PE Ratio",
"title": "Valuation Ratios",
"description": "The PE Ratio, or Price-to-Earnings Ratio, is a crucial financial metric that helps investors evaluate a company's market value relative to its earnings. Simply put, it tells you how much you would have to spend to buy one dollar of a company's earnings. A high PE Ratio could suggest that the market has high expectations for a company's future growth, while a low PE Ratio might indicate that the company is undervalued. This ratio is a key tool in comparing the value of different companies within the same industry.",
"metadata": {
"ratio": "PE Ratio"
},
"companies": [
{
"name": "Apple Inc.",
"ticker": "AAPL",
"companyId": "NasdaqGS-AAPL"
},
{
"name": "Microsoft Corporation",
"ticker": "MSFT",
"companyId": "NasdaqGS-MSFT"
},
{
"name": "Alphabet Inc.",
"ticker": "GOOGL",
"companyId": "NasdaqGS-GOOGL"
},
...
]
},
{
"uid": "PS Ratio",
"title": "Valuation Ratios",
"description": "The Price-to-Sales (PS) Ratio is a valuable financial metric used to assess the value of a company. It compares a company's stock price to its revenue per share, providing an indication of the value placed on each dollar of a company's sales or revenues. In essence, a lower PS Ratio could suggest that the stock is undervalued, while a higher ratio might indicate overvaluation. This tool is particularly useful when analyzing companies with no earnings or profit.",
"metadata": {
"ratio": "PS Ratio"
},
"companies": [
{
"name": "Apple Inc.",
"ticker": "AAPL",
"companyId": "NasdaqGS-AAPL"
},
{
"name": "Microsoft Corporation",
"ticker": "MSFT",
"companyId": "NasdaqGS-MSFT"
},
...
]
},
{
"uid": "PB Ratio",
"title": "Valuation Ratios",
"description": "The Price-to-Book (PB) Ratio is a financial metric that compares a company's current market price to its book value. Essentially, it shows how much investors are willing to pay for each dollar of a company's net assets. A lower PB Ratio could indicate that the stock is undervalued, while a higher ratio might suggest overvaluation. It's a key tool for value investors to identify potential investment opportunities.",
"metadata": {
"ratio": "PB Ratio"
},
"companies": [
{
"name": "Apple Inc.",
"ticker": "AAPL",
"companyId": "NasdaqGS-AAPL"
},
{
"name": "Microsoft Corporation",
"ticker": "MSFT",
"companyId": "NasdaqGS-MSFT"
},
{
"name": "Alphabet Inc.",
"ticker": "GOOGL",
"companyId": "NasdaqGS-GOOGL"
},
{
"name": "Amazon.com, Inc.",
"ticker": "AMZN",
"companyId": "NasdaqGS-AMZN"
},
...
]
}
]
}
export interface Dataset {
title: string
logo?: string
chartType?: 'standard' | 'area' | 'stackedBar' | 'stackedArea'
dailySlider?: boolean
toggles: {
dataLabels: boolean
decimalPlaces: boolean
currency: boolean
period: boolean
format: boolean
reverseDates: boolean
timeframe: boolean
}
defaults: {
dataLabels: boolean
decimalPlaces: number
currency: string | null
period: string
format: string
reverseDates: boolean
timeframe: string
}
options: {
decimalPlaces: number[]
currency: string[]
period: string[]
format: string[]
timeframe: ({ label: string; value: string | null } | string)[]
}
datasets: {
title: string
period: 'Annual' | 'Quarterly' | 'Semi-Annual' | 'LTM' | 'Daily'
format: 'number' | 'ratio' | '%'
currency: string | null
isCurrency: boolean
table: boolean
chart: boolean
chartType: string
data: { x: string; y: number }[]
}[]
}
  • Boost: Recommended to keep as is and/or boost if the document is not showing up, although most likely the description should be improved if it’s not showing up as intended.
  • Max Docs: Recommended to 1-4, i.e., for something like price chart or dividends you would generally only want to show one document per response (the most accurate one) but for financials you may want to allow more (i.e., 2 - 4) in case the questions are around comparisons.

Tabluar

This dataset type is used for structured data that can be displayed in a table or chart. Similar to Non-Text datasets, descriptions are indexed and require an API endpoint to hydrate.

Below contains the TypeScript interface for the tabular dataset.

{
"title": "Berkshire Hathaway Inc (Warren Buffett) Fund Holdings",
"description": "Warren Buffett is the most respected and successful investor in history, having been called "The Oracle of Omaha" for his impressive investing prowess. Buffett studied under the legendary Benjamin Graham at Columbia University; Graham had a major impact on Buffett's life and investment strategies. Buffett is Chairman of the miraculous Berkshire Hathaway, which he built from a textile company into a major insurance conglomerate.",
"datasets": [
{
"title": "Fund Holdings",
"type": "tabular",
"columns": [
{
"title": "Company",
"accessorKey": "name"
},
{
"title": "Ticker",
"accessorKey": "ticker"
},
{
"title": "Market Value",
"accessorKey": "marketValue"
},
{
"title": "Portfolio %",
"accessorKey": "weight"
},
{
"title": "Shares",
"accessorKey": "shares"
},
{
"title": "Shares % Chg.",
"accessorKey": "sharesChange"
},
{
"title": "Ownership %",
"accessorKey": "ownership"
}, ...
],
"data": [
{
"name": {
"cellType": "string",
"value": "Apple Inc"
},
"ticker": {
"cellType": "string",
"value": "AAPL"
},
"marketValue": {
"cellType": "number",
"value": 156753093002,
"currency": "USD",
"isCurrency": true,
"format": "number"
},
"weight": {
"cellType": "number",
"value": 50.0397,
"format": "%"
},
"shares": {
"cellType": "number",
"value": 915560382,
"format": "number"
},
"sharesChange": {
"cellType": "number",
"value": 0,
"format": "%"
},
"ownership": {
"cellType": "number",
"value": 5.8325,
"format": "%"
}
},
{
"name": {
"cellType": "string",
"value": "Bank Amer Corp"
},
"ticker": {
"cellType": "string",
"value": "BAC"
},
"marketValue": {
"cellType": "number",
"value": 28279487924,
"currency": "USD",
"isCurrency": true,
"format": "number"
},
"weight": {
"cellType": "number",
"value": 9.0276,
"format": "%"
},
"shares": {
"cellType": "number",
"value": 1032852006,
"format": "number"
},
"sharesChange": {
"cellType": "number",
"value": 0,
"format": "%"
},
"ownership": {
"cellType": "number",
"value": 12.8831,
"format": "%"
}
},
{
"name": {
"cellType": "string",
"value": "American Express Co"
},
"ticker": {
"cellType": "string",
"value": "AXP"
},
"marketValue": {
"cellType": "number",
"value": 22618800333,
"currency": "USD",
"isCurrency": true,
"format": "number"
},
"weight": {
"cellType": "number",
"value": 7.2205,
"format": "%"
},
"shares": {
"cellType": "number",
"value": 151610700,
"format": "number"
},
"sharesChange": {
"cellType": "number",
"value": 0,
"format": "%"
},
"ownership": {
"cellType": "number",
"value": 20.7118,
"format": "%"
}, ...
},
]
}
]
}
export interface TabularDatasets extends DatasetBasics {
datasets: TabularDataset[];
}
export interface DatasetBasics {
title: string;
description?: string;
source?: string;
logo: string;
toggles?: {
dataLabels?: boolean;
decimalPlaces?: boolean;
currency?: boolean;
period?: boolean;
format?: boolean;
reverseDates?: boolean;
timeframe?: boolean;
};
defaults?: {
dataLabels?: boolean;
decimalPlaces?: number;
currency?: string;
period?: string;
format?: 'K' | 'M' | 'B';
reverseDates?: boolean;
timeframe?: string;
};
options?: {
decimalPlaces?: number[];
currency?: string[];
period?: string[];
format?: ('K' | 'M' | 'B')[];
timeframe?: { label: string; value: string | null }[];
};
chartType?: 'standard' | 'area' | 'stackedBar' | 'stackedArea';
dailySlider?: boolean;
}
export interface TabularDataset {
title: string;
type: 'tabular';
columns: { title: string; accessorKey: string; align?: 'right' | 'left' }[];
data: Record<string, StringCell | NumberCell>[];
}
export interface StringCell {
cellType: 'string';
value: string;
}
export interface NumberCell {
value: number;
cellType: 'number';
currency?: string | null;
isCurrency?: boolean;
format: 'number' | '%' | 'ratio';
}

For more details on how work with structured datasets, please see the structured datasets section.

Requirements

GET or POST endpoint that uses metadata from the document and/or the companyId to make requests to get data in real-time.

Interpolation

Interpolation involves inserting dynamic values into a request, denoted by curly brackets {}. These values typically come from either a companyId or the metadata of indexed Pinecone documents. For example, if you wanted to get the price chart for a specific stock, you would use the following interpolation: https://finchat.io/api/v1/price-chart/{ticker}.

Caching

When a document is accessed, it is fetched directly from the endpoint without storage on the server. To improve performance, customers are advised to implement their own caching mechanism, allowing for quicker retrieval of frequently accessed data.

Example Prompts

This field allows you to set example prompts that will show up in a new chat window. This is a great way to help users get started with the widget and to show them what types of questions they can ask.

Best practices include keeping the prompt short, specifying the format or type of response you're looking for (e.g., provide a summary, answer with pros and cons, explain a concept, etc.), and avoiding ambiguity and bias.

Custom Branding

Color Scheme

Customize the response chart colors with the Color Scheme option.

Display Remaining Prompts

Show remaining number of prompts a user has at the bottom of the chat window by enabling this option.

Font Configuration

Set a custom font for the widget using Font Configuration.

Custom Logos

Personalize the top-left logo for the widget with Custom Logos.