- SECTIONS
IRN API Overview
The FactSet Internal Research Notes (IRN) API enables Application Developers to programmatically manage and process proprietary research contents in FactSet IRN.
Our APIs provide a channel to Contribute and Consume IRN Notes, Meetings, Symbols and Contacts data. The IRN Configuration API also allows you to get your custom IRN configuration details which support your custom workflows.
There are three types of workflows supported with the API:
- Business Continuity and Compliance: Retrieve scheduled backups of all RMS data, including text markup and attachments, for business continuity and compliance purposes.
- Real Time Research Access: Integrate internal research into additional tools, client portals or proprietary interfaces in a real-time manner.
- Single Research Hub / Integration: Leverage the IRN API to allow notes created in parallel systems to integrate with the larger research workflow across FactSet.
Technical Details
The IRN API delivers data in a JSON format, refer to the documentation for more information about the API Contract.
Requests made from Developer’s Portal could be directed to Production Environment https://api.factset.com/research/irn/v1 or Sandbox Environment https://api-sandbox.factset.com/research/irn/v1/ based on your preference and selection as you execute the request in the portal.
Production Environment will point to client's exiting IRN database where you will be able to create and extract research contents directly to and from your IRN system.
Sandbox environment is an empty IRN container available for you to use as a development area when exploring IRN APIs. Initially you will need to use POST requests before GET to have sample data with which to experiment your create and extract research workflows.
- IRN Notes API v1.6.pdf658.69 KB
- IRN API Tableau Web Connector.pdf425.31 KB
- IRN Power BI Data Connector.pdf478.17 KB
using FactSet.SDK.IRNNotes.Api;
using FactSet.SDK.IRNNotes.Client;
using FactSet.SDK.IRNNotes.Model;
using System.Net;
using System.Text.Json;
namespace ConsoleApp
{
class NotesSample
{
private static Configuration _irnApiConfiguration;
private const string BASE_PATH = "https://api-sandbox.factset.com/research/irn";
private const string USER_NAME = "USERNAME-SERIAL";
private const string PASSWORD = "2Yxvt0kCw5DulabL1UyAMHEBpWq20YXbPXopZDFa";
public static void Main()
{
var apiConfiguration = GetIrnApiConfiguration();
var notesApiInstance = new NotesApi(apiConfiguration);
var startDate = "2019-09-01"; // string | StartDate
var endDate = "2020-09-30"; // string | EndDate
var identifiers = new List<string> { "TSLA-US" }; // List | Set of identifiers to filter on (optional)
var limit = 10; // int? | Limit on the number of notes retrieved (optional)
var includeDeletedNotes = false; // bool? | Include notes that have been (soft) deleted in the results
var serializerOptions = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
WriteIndented = true
};
try
{
Guid newNoteId = Guid.Empty;
UserSerialDto author = new UserSerialDto("AUTHOR_USERNAME", "AUTHOR_SERIAL");
//Create a new note
ApiResponse<NewItemDto> createNoteResponse = notesApiInstance.CreateNoteWithHttpInfo(createNoteDto: new CreateNoteDto(author, "This is a test note created through the API", "TSLA-US", "2020-09-19"));
if (createNoteResponse.StatusCode == HttpStatusCode.Created)
{
newNoteId = createNoteResponse.Data.Id;
Console.WriteLine($"New note {newNoteId} created");
//Fetch the new note
NoteDto newNote = notesApiInstance.GetNote(newNoteId);
Console.WriteLine(JsonSerializer.Serialize(newNote, serializerOptions));
}
//Add an attachment to the new note
var attachmentsApiInstance = new AttachmentsApi(apiConfiguration);
ApiResponse<NewItemDto> createAttachmentResponse = attachmentsApiInstance.CreateAttachmentWithHttpInfo(newNoteId, File.OpenRead("SampleFile.pdf"));
Guid newAttachmentId = createAttachmentResponse.Data.Id;
Console.WriteLine($"New attachment {newAttachmentId} added to note {newNoteId}");
//Fetch note summaries
List<NoteSummaryDto> noteSummaries = notesApiInstance.GetNotes(startDate, endDate, identifiers, null, null, null, null, limit, null, null, null, false, includeDeletedNotes);
Console.WriteLine(JsonSerializer.Serialize(noteSummaries, serializerOptions));
Console.WriteLine($"Number of notes listed above: {noteSummaries.Count}");
//Download the attachment created earlier
ApiResponse<object> response = attachmentsApiInstance.DownloadAttachmentWithHttpInfo(newNoteId, newAttachmentId);
File.WriteAllText("SampleFile.pdf", response.RawContent);
}
catch (ApiException e)
{
Console.WriteLine("Exception when calling Notes API: " + e.Message);
Console.WriteLine("Status Code: " + e.ErrorCode);
Console.WriteLine(e.StackTrace);
}
}
private static Configuration GetIrnApiConfiguration()
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
if (_irnApiConfiguration != null)
{
return _irnApiConfiguration;
}
_irnApiConfiguration = new Configuration
{
BasePath = BASE_PATH,
Username = USER_NAME,
Password = PASSWORD,
};
return _irnApiConfiguration;
}
}
}
using FactSet.InternalResearchNotes.Api.Symbols.Api;
using FactSet.InternalResearchNotes.Api.Symbols.Client;
using FactSet.InternalResearchNotes.Api.Symbols.Model;
using System;
using System.Collections.Generic;
using System.Net;
using System.Text.Json;
using System.Linq;
namespace ConsoleApp
{
class SymbolsSample
{
private static Configuration _irnApiConfiguration;
private const string BASE_PATH = "https://api-sandbox.factset.com/research/irn";
private const string USER_NAME = "USERNAME-SERIAL";
private const string PASSWORD = "dvjrVB8JuAH53vlXkWTNkXJvdr81LITNVJ6TNlJx";
public static void Main()
{
var apiInstance = new IdentifiersApi(GetIrnApiConfiguration());
var serializerOptions = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
WriteIndented = true
};
try
{
ApiResponse<List<IdentifierResolutionDto>> response = apiInstance.GetIdentifiersWithHttpInfo("FDS-US");
if (response.StatusCode == HttpStatusCode.OK)
{
var resolvedInstrument = response.Data.First(x => x.Query.Equals("FDS-US"));
var entityId = resolvedInstrument.InstrumentMetadata.EntityId;
var instrumentName = resolvedInstrument.InstrumentMetadata.Name;
Console.WriteLine($"{instrumentName} - {entityId}");
Console.WriteLine(JsonSerializer.Serialize(resolvedInstrument, serializerOptions));
};
}
catch (ApiException e)
{
Console.WriteLine("Exception when calling Notes API: " + e.Message);
Console.WriteLine("Status Code: " + e.ErrorCode);
Console.WriteLine(e.StackTrace);
}
}
private static Configuration GetIrnApiConfiguration()
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
if (_irnApiConfiguration != null)
{
return _irnApiConfiguration;
}
_irnApiConfiguration = new Configuration
{
BasePath = BASE_PATH,
Username = USER_NAME,
Password = PASSWORD,
};
return _irnApiConfiguration;
}
}
}
v1
Summary
V1.0 Released on 12 Sep 2019
Functionality Additions
- Get Notes
Changes
No Changes
Bug Fixes
No Fixes
v1.1
Summary
V1.1 Released on 30 November 2019
Functionality Additions
- Create Notes
- Get Note
- Delete Note
- Get Attachments
- Get Attachment
- Get Events
Changes
- Get Notes accepts "modifiedSince"
Bug Fixes
- No Fixes
v1.2
Summary
V1.2 Released on 8 February 2020
Functionality Additions
- Edit Note
- Add Attachment
- Delete Attachment
- Get Event
Changes
- Ability to include deleted records and filter by modifiedSince in GetNotes
- Support for Related Records & Related Contacts in GetNotes , GetNote
Bug Fixes
- No Fixes
v1.3
Summary
V1.3 Released on 29th October 2020
Functionality Additions
- Improved attachment upload functionality
Changes
No Changes
Bug Fixes
No Fixes
v1.4
Summary
V1.4 Released on 7th November 2020
Functionality Additions
- Get Comments
- Get Comment
- Create Comment
- Edit Comment
- Delete Comment
- Get Comment Attachment
- Create Comment Attachment
- Download Comment Attachment
Changes
- No Changes
Bug Fixes
- No Fixes
v1.5
Summary
Updated on 29 March 2022
Functionality Additions
- AllEvents endpoint
Changes
- Enhanced Identifiers endpoint to include symbol type
Bug Fixes
- No Fixes
Use Case – Retrieve IRN Contents for Business Continuity:
Use Case - Save Proprietary Research in IRN for Seamless Collaboration and Integration