diff --git a/bank-feeds/.gitattributes b/bank-feeds/.gitattributes
new file mode 100755
index 000000000..c094dba67
--- /dev/null
+++ b/bank-feeds/.gitattributes
@@ -0,0 +1,2 @@
+# This allows generated code to be indexed correctly
+*.cs linguist-generated=false
\ No newline at end of file
diff --git a/bank-feeds/.gitignore b/bank-feeds/.gitignore
new file mode 100755
index 000000000..b004ecedd
--- /dev/null
+++ b/bank-feeds/.gitignore
@@ -0,0 +1,3 @@
+obj/
+bin/
+debug/
diff --git a/bank-feeds/CodatBankFeeds.sln b/bank-feeds/CodatBankFeeds.sln
new file mode 100755
index 000000000..70876d588
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds.sln
@@ -0,0 +1,17 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodatBankFeeds", "CodatBankFeeds\CodatBankFeeds.csproj", "{F0CE92B5-F3CC-45A2-AA83-118C38724EB1}"
+EndProject
+
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {F0CE92B5-F3CC-45A2-AA83-118C38724EB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F0CE92B5-F3CC-45A2-AA83-118C38724EB1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F0CE92B5-F3CC-45A2-AA83-118C38724EB1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F0CE92B5-F3CC-45A2-AA83-118C38724EB1}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+EndGlobal
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/AccountMapping.cs b/bank-feeds/CodatBankFeeds/AccountMapping.cs
new file mode 100755
index 000000000..4633d38a2
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/AccountMapping.cs
@@ -0,0 +1,173 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds
+{
+ using CodatBankFeeds.Models.Operations;
+ using CodatBankFeeds.Models.Shared;
+ using CodatBankFeeds.Utils;
+ using Newtonsoft.Json;
+ using System.Net.Http.Headers;
+ using System.Net.Http;
+ using System.Threading.Tasks;
+ using System;
+
+ public interface IAccountMappingSDK
+ {
+ Task CreateAsync(CreateBankAccountMappingRequest? request = null);
+ Task GetAsync(GetBankAccountMappingRequest? request = null);
+ }
+
+ public class AccountMappingSDK: IAccountMappingSDK
+ {
+ public SDKConfig Config { get; private set; }
+ private const string _language = "csharp";
+ private const string _sdkVersion = "0.1.0";
+ private const string _sdkGenVersion = "2.91.4";
+ private const string _openapiDocVersion = "3.0.0";
+ private string _serverUrl = "";
+ private ISpeakeasyHttpClient _defaultClient;
+ private ISpeakeasyHttpClient _securityClient;
+
+ public AccountMappingSDK(ISpeakeasyHttpClient defaultClient, ISpeakeasyHttpClient securityClient, string serverUrl, SDKConfig config)
+ {
+ _defaultClient = defaultClient;
+ _securityClient = securityClient;
+ _serverUrl = serverUrl;
+ Config = config;
+ }
+
+
+ ///
+ /// Create bank feed bank account mapping
+ ///
+ ///
+ /// The *Create bank account mapping* endpoint creates a new mapping between a source bank account and a potential account in the accounting platform (target account).
+ ///
+ /// A bank feed account mapping is a specified link between the source account (provided by the Codat user) and the target account (the end users account in the underlying platform).
+ ///
+ /// To find valid target account options, first call list bank feed account mappings.
+ ///
+ /// This endpoint is only needed if building an account management UI.
+ ///
+ ///
+ public async Task CreateAsync(CreateBankAccountMappingRequest? request = null)
+ {
+ string baseUrl = _serverUrl;
+ if (baseUrl.EndsWith("/"))
+ {
+ baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
+ }
+ var urlString = URLBuilder.Build(baseUrl, "/companies/{companyId}/connections/{connectionId}/bankFeedAccounts/mapping", request);
+
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString);
+ httpRequest.Headers.Add("user-agent", $"speakeasy-sdk/{_language} {_sdkVersion} {_sdkGenVersion} {_openapiDocVersion}");
+
+ var serializedBody = RequestBodySerializer.Serialize(request, "BankFeedAccountMapping", "json");
+ if (serializedBody != null)
+ {
+ httpRequest.Content = serializedBody;
+ }
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new CreateBankAccountMappingResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.BankFeedAccountMappingResponse = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 400) || (response.StatusCode == 401) || (response.StatusCode == 404) || (response.StatusCode == 429))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.ErrorMessage = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ ///
+ /// List bank feed account mappings
+ ///
+ ///
+ /// The *List bank account mappings* endpoint returns information about a source bank account and any current or potential target mapping accounts.
+ ///
+ /// A bank feed account mapping is a specified link between the source account (provided by the Codat user) and the target account (the end users account in the underlying platform).
+ ///
+ /// This endpoint is only needed if building an account management UI.
+ ///
+ ///
+ public async Task GetAsync(GetBankAccountMappingRequest? request = null)
+ {
+ string baseUrl = _serverUrl;
+ if (baseUrl.EndsWith("/"))
+ {
+ baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
+ }
+ var urlString = URLBuilder.Build(baseUrl, "/companies/{companyId}/connections/{connectionId}/bankFeedAccounts/mapping", request);
+
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", $"speakeasy-sdk/{_language} {_sdkVersion} {_sdkGenVersion} {_openapiDocVersion}");
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetBankAccountMappingResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.BankFeedMapping = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 401) || (response.StatusCode == 429))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.ErrorMessage = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/CodatBankFeeds.csproj b/bank-feeds/CodatBankFeeds/CodatBankFeeds.csproj
new file mode 100755
index 000000000..fa8f2c608
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/CodatBankFeeds.csproj
@@ -0,0 +1,19 @@
+
+
+ true
+ Codat.BankFeeds
+ 0.1.0
+ Codat
+ net5.0
+ enable
+ README.md
+
+
+
+
+
+
+
+
+
+
diff --git a/bank-feeds/CodatBankFeeds/CodatBankFeedsSDK.cs b/bank-feeds/CodatBankFeeds/CodatBankFeedsSDK.cs
new file mode 100755
index 000000000..d2b9350d3
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/CodatBankFeedsSDK.cs
@@ -0,0 +1,77 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds
+{
+ using CodatBankFeeds.Models.Shared;
+ using CodatBankFeeds.Utils;
+ using System.Collections.Generic;
+ using System.Net.Http;
+ using System.Threading.Tasks;
+ using System;
+
+ public interface ICodatBankFeedsSDK
+ {
+ public IAccountMappingSDK AccountMapping { get; }
+ public ICompaniesSDK Companies { get; }
+ public IConnectionsSDK Connections { get; }
+ public ISourceAccountsSDK SourceAccounts { get; }
+ public ITransactionsSDK Transactions { get; }
+ }
+
+ public class SDKConfig
+ {
+ }
+
+ public class CodatBankFeedsSDK: ICodatBankFeedsSDK
+ {
+ public SDKConfig Config { get; private set; }
+ public static List ServerList = new List()
+ {
+ "https://api.codat.io",
+ };
+
+ private const string _language = "csharp";
+ private const string _sdkVersion = "0.1.0";
+ private const string _sdkGenVersion = "2.91.4";
+ private const string _openapiDocVersion = "3.0.0";
+ private string _serverUrl = "";
+ private ISpeakeasyHttpClient _defaultClient;
+ private ISpeakeasyHttpClient _securityClient;
+ public IAccountMappingSDK AccountMapping { get; private set; }
+ public ICompaniesSDK Companies { get; private set; }
+ public IConnectionsSDK Connections { get; private set; }
+ public ISourceAccountsSDK SourceAccounts { get; private set; }
+ public ITransactionsSDK Transactions { get; private set; }
+
+ public CodatBankFeedsSDK(Security? security = null, string? serverUrl = null, ISpeakeasyHttpClient? client = null)
+ {
+ _serverUrl = serverUrl ?? CodatBankFeedsSDK.ServerList[0];
+
+ _defaultClient = new SpeakeasyHttpClient(client);
+ _securityClient = _defaultClient;
+
+ if(security != null)
+ {
+ _securityClient = SecuritySerializer.Apply(_defaultClient, security);
+ }
+
+ Config = new SDKConfig()
+ {
+ };
+
+ AccountMapping = new AccountMappingSDK(_defaultClient, _securityClient, _serverUrl, Config);
+ Companies = new CompaniesSDK(_defaultClient, _securityClient, _serverUrl, Config);
+ Connections = new ConnectionsSDK(_defaultClient, _securityClient, _serverUrl, Config);
+ SourceAccounts = new SourceAccountsSDK(_defaultClient, _securityClient, _serverUrl, Config);
+ Transactions = new TransactionsSDK(_defaultClient, _securityClient, _serverUrl, Config);
+ }
+ }
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Companies.cs b/bank-feeds/CodatBankFeeds/Companies.cs
new file mode 100755
index 000000000..a5eeba594
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Companies.cs
@@ -0,0 +1,337 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds
+{
+ using CodatBankFeeds.Models.Operations;
+ using CodatBankFeeds.Models.Shared;
+ using CodatBankFeeds.Utils;
+ using Newtonsoft.Json;
+ using System.Net.Http.Headers;
+ using System.Net.Http;
+ using System.Threading.Tasks;
+ using System;
+
+ public interface ICompaniesSDK
+ {
+ Task CreateAsync(CompanyRequestBody? request = null);
+ Task DeleteAsync(DeleteCompanyRequest? request = null);
+ Task GetAsync(GetCompanyRequest? request = null);
+ Task ListAsync(ListCompaniesRequest? request = null);
+ Task UpdateAsync(UpdateCompanyRequest? request = null);
+ }
+
+ public class CompaniesSDK: ICompaniesSDK
+ {
+ public SDKConfig Config { get; private set; }
+ private const string _language = "csharp";
+ private const string _sdkVersion = "0.1.0";
+ private const string _sdkGenVersion = "2.91.4";
+ private const string _openapiDocVersion = "3.0.0";
+ private string _serverUrl = "";
+ private ISpeakeasyHttpClient _defaultClient;
+ private ISpeakeasyHttpClient _securityClient;
+
+ public CompaniesSDK(ISpeakeasyHttpClient defaultClient, ISpeakeasyHttpClient securityClient, string serverUrl, SDKConfig config)
+ {
+ _defaultClient = defaultClient;
+ _securityClient = securityClient;
+ _serverUrl = serverUrl;
+ Config = config;
+ }
+
+
+ ///
+ /// Create company
+ ///
+ ///
+ /// Creates a new company that can be used to assign connections to.
+ ///
+ /// If forbidden characters (see `name` pattern) are present in the request, a company will be created with the forbidden characters removed. For example, `Company (Codat[1])` with be created as `Company Codat1`.
+ ///
+ ///
+ ///
+ ///
+ public async Task CreateAsync(CompanyRequestBody? request = null)
+ {
+ string baseUrl = _serverUrl;
+ if (baseUrl.EndsWith("/"))
+ {
+ baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
+ }
+ var urlString = baseUrl + "/companies";
+
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString);
+ httpRequest.Headers.Add("user-agent", $"speakeasy-sdk/{_language} {_sdkVersion} {_sdkGenVersion} {_openapiDocVersion}");
+
+ var serializedBody = RequestBodySerializer.Serialize(request, "Request", "json");
+ if (serializedBody != null)
+ {
+ httpRequest.Content = serializedBody;
+ }
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new CreateCompanyResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Company = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 400) || (response.StatusCode == 401) || (response.StatusCode == 429))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.ErrorMessage = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ ///
+ /// Delete a company
+ ///
+ ///
+ ///
+ /// Permanently deletes a company, its connections and any cached data. This operation is irreversible. If the company ID does not exist an error is returned.
+ ///
+ ///
+ public async Task DeleteAsync(DeleteCompanyRequest? request = null)
+ {
+ string baseUrl = _serverUrl;
+ if (baseUrl.EndsWith("/"))
+ {
+ baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
+ }
+ var urlString = URLBuilder.Build(baseUrl, "/companies/{companyId}", request);
+
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString);
+ httpRequest.Headers.Add("user-agent", $"speakeasy-sdk/{_language} {_sdkVersion} {_sdkGenVersion} {_openapiDocVersion}");
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new DeleteCompanyResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+ if((response.StatusCode == 204))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401) || (response.StatusCode == 404) || (response.StatusCode == 429))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.ErrorMessage = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ ///
+ /// Get company
+ ///
+ ///
+ /// Returns the company for a valid identifier. If the identifier is for a deleted company, a not found response is returned.
+ ///
+ ///
+ public async Task GetAsync(GetCompanyRequest? request = null)
+ {
+ string baseUrl = _serverUrl;
+ if (baseUrl.EndsWith("/"))
+ {
+ baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
+ }
+ var urlString = URLBuilder.Build(baseUrl, "/companies/{companyId}", request);
+
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", $"speakeasy-sdk/{_language} {_sdkVersion} {_sdkGenVersion} {_openapiDocVersion}");
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetCompanyResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Company = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 401) || (response.StatusCode == 404) || (response.StatusCode == 429))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.ErrorMessage = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ ///
+ /// List companies
+ ///
+ ///
+ /// Returns a list of your companies. The company schema contains a list of [connections](https://docs.codat.io/bank-feeds-api#/schemas/Connection) related to the company.
+ ///
+ ///
+ public async Task ListAsync(ListCompaniesRequest? request = null)
+ {
+ string baseUrl = _serverUrl;
+ if (baseUrl.EndsWith("/"))
+ {
+ baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
+ }
+ var urlString = URLBuilder.Build(baseUrl, "/companies", request);
+
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", $"speakeasy-sdk/{_language} {_sdkVersion} {_sdkGenVersion} {_openapiDocVersion}");
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new ListCompaniesResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Companies = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 400) || (response.StatusCode == 401) || (response.StatusCode == 429))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.ErrorMessage = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ ///
+ /// Update company
+ ///
+ ///
+ /// Updates both the name and description of the company.
+ ///
+ ///
+ public async Task UpdateAsync(UpdateCompanyRequest? request = null)
+ {
+ string baseUrl = _serverUrl;
+ if (baseUrl.EndsWith("/"))
+ {
+ baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
+ }
+ var urlString = URLBuilder.Build(baseUrl, "/companies/{companyId}", request);
+
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Put, urlString);
+ httpRequest.Headers.Add("user-agent", $"speakeasy-sdk/{_language} {_sdkVersion} {_sdkGenVersion} {_openapiDocVersion}");
+
+ var serializedBody = RequestBodySerializer.Serialize(request, "CompanyRequestBody", "json");
+ if (serializedBody != null)
+ {
+ httpRequest.Content = serializedBody;
+ }
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new UpdateCompanyResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Company = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 401) || (response.StatusCode == 404) || (response.StatusCode == 429))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.ErrorMessage = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Connections.cs b/bank-feeds/CodatBankFeeds/Connections.cs
new file mode 100755
index 000000000..f29463435
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Connections.cs
@@ -0,0 +1,335 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds
+{
+ using CodatBankFeeds.Models.Operations;
+ using CodatBankFeeds.Models.Shared;
+ using CodatBankFeeds.Utils;
+ using Newtonsoft.Json;
+ using System.Net.Http.Headers;
+ using System.Net.Http;
+ using System.Threading.Tasks;
+ using System;
+
+ public interface IConnectionsSDK
+ {
+ Task CreateAsync(CreateConnectionRequest? request = null);
+ Task DeleteAsync(DeleteConnectionRequest? request = null);
+ Task GetAsync(GetConnectionRequest? request = null);
+ Task ListAsync(ListConnectionsRequest? request = null);
+ Task UnlinkAsync(UnlinkConnectionRequest? request = null);
+ }
+
+ public class ConnectionsSDK: IConnectionsSDK
+ {
+ public SDKConfig Config { get; private set; }
+ private const string _language = "csharp";
+ private const string _sdkVersion = "0.1.0";
+ private const string _sdkGenVersion = "2.91.4";
+ private const string _openapiDocVersion = "3.0.0";
+ private string _serverUrl = "";
+ private ISpeakeasyHttpClient _defaultClient;
+ private ISpeakeasyHttpClient _securityClient;
+
+ public ConnectionsSDK(ISpeakeasyHttpClient defaultClient, ISpeakeasyHttpClient securityClient, string serverUrl, SDKConfig config)
+ {
+ _defaultClient = defaultClient;
+ _securityClient = securityClient;
+ _serverUrl = serverUrl;
+ Config = config;
+ }
+
+
+ ///
+ /// Create connection
+ ///
+ ///
+ /// Creates a connection for the company by providing a valid `platformKey`.
+ ///
+ /// Use the [List Integrations](https://docs.codat.io/bank-feeds-api#/operations/list-integrations) endpoint to access valid platform keys.
+ ///
+ ///
+ public async Task CreateAsync(CreateConnectionRequest? request = null)
+ {
+ string baseUrl = _serverUrl;
+ if (baseUrl.EndsWith("/"))
+ {
+ baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
+ }
+ var urlString = URLBuilder.Build(baseUrl, "/companies/{companyId}/connections", request);
+
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString);
+ httpRequest.Headers.Add("user-agent", $"speakeasy-sdk/{_language} {_sdkVersion} {_sdkGenVersion} {_openapiDocVersion}");
+
+ var serializedBody = RequestBodySerializer.Serialize(request, "RequestBody", "json");
+ if (serializedBody != null)
+ {
+ httpRequest.Content = serializedBody;
+ }
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new CreateConnectionResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Connection = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 401) || (response.StatusCode == 404) || (response.StatusCode == 429))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.ErrorMessage = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ ///
+ /// Delete connection
+ ///
+ ///
+ /// Revoke and remove a connection from a company.
+ /// This operation is not reversible. The end user would need to reauthorize a new data connection if you wish to view new data for this company.
+ ///
+ ///
+ public async Task DeleteAsync(DeleteConnectionRequest? request = null)
+ {
+ string baseUrl = _serverUrl;
+ if (baseUrl.EndsWith("/"))
+ {
+ baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
+ }
+ var urlString = URLBuilder.Build(baseUrl, "/companies/{companyId}/connections/{connectionId}", request);
+
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString);
+ httpRequest.Headers.Add("user-agent", $"speakeasy-sdk/{_language} {_sdkVersion} {_sdkGenVersion} {_openapiDocVersion}");
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new DeleteConnectionResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+ if((response.StatusCode == 200))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401) || (response.StatusCode == 404) || (response.StatusCode == 429))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.ErrorMessage = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ ///
+ /// Get connection
+ ///
+ ///
+ /// Returns a specific connection for a company when valid identifiers are provided. If the identifiers are for a deleted company and/or connection, a not found response is returned.
+ ///
+ ///
+ public async Task GetAsync(GetConnectionRequest? request = null)
+ {
+ string baseUrl = _serverUrl;
+ if (baseUrl.EndsWith("/"))
+ {
+ baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
+ }
+ var urlString = URLBuilder.Build(baseUrl, "/companies/{companyId}/connections/{connectionId}", request);
+
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", $"speakeasy-sdk/{_language} {_sdkVersion} {_sdkGenVersion} {_openapiDocVersion}");
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetConnectionResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Connection = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 401) || (response.StatusCode == 404) || (response.StatusCode == 429))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.ErrorMessage = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ ///
+ /// List connections
+ ///
+ ///
+ /// List the connections for a company.
+ ///
+ ///
+ public async Task ListAsync(ListConnectionsRequest? request = null)
+ {
+ string baseUrl = _serverUrl;
+ if (baseUrl.EndsWith("/"))
+ {
+ baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
+ }
+ var urlString = URLBuilder.Build(baseUrl, "/companies/{companyId}/connections", request);
+
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", $"speakeasy-sdk/{_language} {_sdkVersion} {_sdkGenVersion} {_openapiDocVersion}");
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new ListConnectionsResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Connections = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 400) || (response.StatusCode == 401) || (response.StatusCode == 404) || (response.StatusCode == 429))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.ErrorMessage = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ ///
+ /// Unlink connection
+ ///
+ ///
+ /// This allows you to deauthorize a connection, without deleting it from Codat. This means you can still view any data that has previously been pulled into Codat, and also lets you re-authorize in future if your customer wishes to resume sharing their data.
+ ///
+ ///
+ public async Task UnlinkAsync(UnlinkConnectionRequest? request = null)
+ {
+ string baseUrl = _serverUrl;
+ if (baseUrl.EndsWith("/"))
+ {
+ baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
+ }
+ var urlString = URLBuilder.Build(baseUrl, "/companies/{companyId}/connections/{connectionId}", request);
+
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Patch, urlString);
+ httpRequest.Headers.Add("user-agent", $"speakeasy-sdk/{_language} {_sdkVersion} {_sdkGenVersion} {_openapiDocVersion}");
+
+ var serializedBody = RequestBodySerializer.Serialize(request, "RequestBody", "json");
+ if (serializedBody != null)
+ {
+ httpRequest.Content = serializedBody;
+ }
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new UnlinkConnectionResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Connection = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 401) || (response.StatusCode == 404) || (response.StatusCode == 429))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.ErrorMessage = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/CreateBankAccountMappingRequest.cs b/bank-feeds/CodatBankFeeds/Models/Operations/CreateBankAccountMappingRequest.cs
new file mode 100755
index 000000000..bac072d01
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/CreateBankAccountMappingRequest.cs
@@ -0,0 +1,30 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Models.Shared;
+ using CodatBankFeeds.Utils;
+
+
+ public class CreateBankAccountMappingRequest
+ {
+ [SpeakeasyMetadata("request:mediaType=application/json")]
+ public BankFeedAccountMapping? BankFeedAccountMapping { get; set; }
+
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=companyId")]
+ public string CompanyId { get; set; }
+
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=connectionId")]
+ public string ConnectionId { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/CreateBankAccountMappingResponse.cs b/bank-feeds/CodatBankFeeds/Models/Operations/CreateBankAccountMappingResponse.cs
new file mode 100755
index 000000000..709f8c5b7
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/CreateBankAccountMappingResponse.cs
@@ -0,0 +1,43 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Models.Shared;
+ using System.Net.Http;
+ using System;
+
+
+ public class CreateBankAccountMappingResponse
+ {
+ ///
+ /// Success
+ ///
+
+ public BankFeedAccountMappingResponse? BankFeedAccountMappingResponse { get; set; }
+
+
+ public string? ContentType { get; set; }
+
+ ///
+ /// The request made is not valid.
+ ///
+
+ public ErrorMessage? ErrorMessage { get; set; }
+
+
+ public int StatusCode { get; set; }
+
+
+ public HttpResponseMessage? RawResponse { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/CreateBankFeedRequest.cs b/bank-feeds/CodatBankFeeds/Models/Operations/CreateBankFeedRequest.cs
new file mode 100755
index 000000000..889f6ccaa
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/CreateBankFeedRequest.cs
@@ -0,0 +1,30 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Models.Shared;
+ using CodatBankFeeds.Utils;
+
+
+ public class CreateBankFeedRequest
+ {
+ [SpeakeasyMetadata("request:mediaType=application/json")]
+ public BankFeedAccount? BankFeedAccount { get; set; }
+
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=companyId")]
+ public string CompanyId { get; set; }
+
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=connectionId")]
+ public string ConnectionId { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/CreateBankFeedResponse.cs b/bank-feeds/CodatBankFeeds/Models/Operations/CreateBankFeedResponse.cs
new file mode 100755
index 000000000..8cd73a0f0
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/CreateBankFeedResponse.cs
@@ -0,0 +1,43 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Models.Shared;
+ using System.Net.Http;
+ using System;
+
+
+ public class CreateBankFeedResponse
+ {
+ ///
+ /// Success
+ ///
+
+ public BankFeedAccount? BankFeedAccount { get; set; }
+
+
+ public string? ContentType { get; set; }
+
+ ///
+ /// The request made is not valid.
+ ///
+
+ public ErrorMessage? ErrorMessage { get; set; }
+
+
+ public int StatusCode { get; set; }
+
+
+ public HttpResponseMessage? RawResponse { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/CreateBankTransactionsRequest.cs b/bank-feeds/CodatBankFeeds/Models/Operations/CreateBankTransactionsRequest.cs
new file mode 100755
index 000000000..b9815baeb
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/CreateBankTransactionsRequest.cs
@@ -0,0 +1,42 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Models.Shared;
+ using CodatBankFeeds.Utils;
+
+
+ public class CreateBankTransactionsRequest
+ {
+ [SpeakeasyMetadata("request:mediaType=application/json")]
+ public CreateBankTransactions? CreateBankTransactions { get; set; }
+
+ ///
+ /// Unique identifier for an account
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=accountId")]
+ public string AccountId { get; set; }
+
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=allowSyncOnPushComplete")]
+ public bool? AllowSyncOnPushComplete { get; set; }
+
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=companyId")]
+ public string CompanyId { get; set; }
+
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=connectionId")]
+ public string ConnectionId { get; set; }
+
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=timeoutInMinutes")]
+ public int? TimeoutInMinutes { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/CreateBankTransactionsResponse.cs b/bank-feeds/CodatBankFeeds/Models/Operations/CreateBankTransactionsResponse.cs
new file mode 100755
index 000000000..ed134f65a
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/CreateBankTransactionsResponse.cs
@@ -0,0 +1,43 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Models.Shared;
+ using System.Net.Http;
+ using System;
+
+
+ public class CreateBankTransactionsResponse
+ {
+
+ public string? ContentType { get; set; }
+
+ ///
+ /// Success
+ ///
+
+ public Models.Shared.CreateBankTransactionsResponse? CreateBankTransactionsResponseValue { get; set; }
+
+ ///
+ /// Your API request was not properly authorized.
+ ///
+
+ public ErrorMessage? ErrorMessage { get; set; }
+
+
+ public int StatusCode { get; set; }
+
+
+ public HttpResponseMessage? RawResponse { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/CreateCompanyResponse.cs b/bank-feeds/CodatBankFeeds/Models/Operations/CreateCompanyResponse.cs
new file mode 100755
index 000000000..9b9679433
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/CreateCompanyResponse.cs
@@ -0,0 +1,43 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Models.Shared;
+ using System.Net.Http;
+ using System;
+
+
+ public class CreateCompanyResponse
+ {
+ ///
+ /// OK
+ ///
+
+ public Company? Company { get; set; }
+
+
+ public string? ContentType { get; set; }
+
+ ///
+ /// The request made is not valid.
+ ///
+
+ public ErrorMessage? ErrorMessage { get; set; }
+
+
+ public int StatusCode { get; set; }
+
+
+ public HttpResponseMessage? RawResponse { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/CreateConnectionRequest.cs b/bank-feeds/CodatBankFeeds/Models/Operations/CreateConnectionRequest.cs
new file mode 100755
index 000000000..6aff20632
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/CreateConnectionRequest.cs
@@ -0,0 +1,26 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Utils;
+
+
+ public class CreateConnectionRequest
+ {
+ [SpeakeasyMetadata("request:mediaType=application/json")]
+ public CreateConnectionRequestBody? RequestBody { get; set; }
+
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=companyId")]
+ public string CompanyId { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/CreateConnectionRequestBody.cs b/bank-feeds/CodatBankFeeds/Models/Operations/CreateConnectionRequestBody.cs
new file mode 100755
index 000000000..57901ff3e
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/CreateConnectionRequestBody.cs
@@ -0,0 +1,23 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using Newtonsoft.Json;
+
+
+ public class CreateConnectionRequestBody
+ {
+ [JsonProperty("platformKey")]
+ public string? PlatformKey { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/CreateConnectionResponse.cs b/bank-feeds/CodatBankFeeds/Models/Operations/CreateConnectionResponse.cs
new file mode 100755
index 000000000..250bbc25b
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/CreateConnectionResponse.cs
@@ -0,0 +1,43 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Models.Shared;
+ using System.Net.Http;
+ using System;
+
+
+ public class CreateConnectionResponse
+ {
+ ///
+ /// OK
+ ///
+
+ public Connection? Connection { get; set; }
+
+
+ public string? ContentType { get; set; }
+
+ ///
+ /// Your API request was not properly authorized.
+ ///
+
+ public ErrorMessage? ErrorMessage { get; set; }
+
+
+ public int StatusCode { get; set; }
+
+
+ public HttpResponseMessage? RawResponse { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/DeleteBankFeedBankAccountRequest.cs b/bank-feeds/CodatBankFeeds/Models/Operations/DeleteBankFeedBankAccountRequest.cs
new file mode 100755
index 000000000..85d784ef8
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/DeleteBankFeedBankAccountRequest.cs
@@ -0,0 +1,32 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Utils;
+
+
+ public class DeleteBankFeedBankAccountRequest
+ {
+ ///
+ /// Unique identifier for an account
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=accountId")]
+ public string AccountId { get; set; }
+
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=companyId")]
+ public string CompanyId { get; set; }
+
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=connectionId")]
+ public string ConnectionId { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/DeleteBankFeedBankAccountResponse.cs b/bank-feeds/CodatBankFeeds/Models/Operations/DeleteBankFeedBankAccountResponse.cs
new file mode 100755
index 000000000..04d4962f2
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/DeleteBankFeedBankAccountResponse.cs
@@ -0,0 +1,37 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Models.Shared;
+ using System.Net.Http;
+ using System;
+
+
+ public class DeleteBankFeedBankAccountResponse
+ {
+
+ public string? ContentType { get; set; }
+
+ ///
+ /// Your API request was not properly authorized.
+ ///
+
+ public ErrorMessage? ErrorMessage { get; set; }
+
+
+ public int StatusCode { get; set; }
+
+
+ public HttpResponseMessage? RawResponse { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/DeleteBankFeedCredentialsRequest.cs b/bank-feeds/CodatBankFeeds/Models/Operations/DeleteBankFeedCredentialsRequest.cs
new file mode 100755
index 000000000..442ac078d
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/DeleteBankFeedCredentialsRequest.cs
@@ -0,0 +1,26 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Utils;
+
+
+ public class DeleteBankFeedCredentialsRequest
+ {
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=companyId")]
+ public string CompanyId { get; set; }
+
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=connectionId")]
+ public string ConnectionId { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/DeleteBankFeedCredentialsResponse.cs b/bank-feeds/CodatBankFeeds/Models/Operations/DeleteBankFeedCredentialsResponse.cs
new file mode 100755
index 000000000..298b5bccb
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/DeleteBankFeedCredentialsResponse.cs
@@ -0,0 +1,37 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Models.Shared;
+ using System.Net.Http;
+ using System;
+
+
+ public class DeleteBankFeedCredentialsResponse
+ {
+
+ public string? ContentType { get; set; }
+
+ ///
+ /// Your API request was not properly authorized.
+ ///
+
+ public ErrorMessage? ErrorMessage { get; set; }
+
+
+ public int StatusCode { get; set; }
+
+
+ public HttpResponseMessage? RawResponse { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/DeleteCompanyRequest.cs b/bank-feeds/CodatBankFeeds/Models/Operations/DeleteCompanyRequest.cs
new file mode 100755
index 000000000..0f66db702
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/DeleteCompanyRequest.cs
@@ -0,0 +1,23 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Utils;
+
+
+ public class DeleteCompanyRequest
+ {
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=companyId")]
+ public string CompanyId { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/DeleteCompanyResponse.cs b/bank-feeds/CodatBankFeeds/Models/Operations/DeleteCompanyResponse.cs
new file mode 100755
index 000000000..f8eaf6b40
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/DeleteCompanyResponse.cs
@@ -0,0 +1,37 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Models.Shared;
+ using System.Net.Http;
+ using System;
+
+
+ public class DeleteCompanyResponse
+ {
+
+ public string? ContentType { get; set; }
+
+ ///
+ /// Your API request was not properly authorized.
+ ///
+
+ public ErrorMessage? ErrorMessage { get; set; }
+
+
+ public int StatusCode { get; set; }
+
+
+ public HttpResponseMessage? RawResponse { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/DeleteConnectionRequest.cs b/bank-feeds/CodatBankFeeds/Models/Operations/DeleteConnectionRequest.cs
new file mode 100755
index 000000000..a29655f4a
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/DeleteConnectionRequest.cs
@@ -0,0 +1,26 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Utils;
+
+
+ public class DeleteConnectionRequest
+ {
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=companyId")]
+ public string CompanyId { get; set; }
+
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=connectionId")]
+ public string ConnectionId { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/DeleteConnectionResponse.cs b/bank-feeds/CodatBankFeeds/Models/Operations/DeleteConnectionResponse.cs
new file mode 100755
index 000000000..69c13c212
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/DeleteConnectionResponse.cs
@@ -0,0 +1,37 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Models.Shared;
+ using System.Net.Http;
+ using System;
+
+
+ public class DeleteConnectionResponse
+ {
+
+ public string? ContentType { get; set; }
+
+ ///
+ /// Your API request was not properly authorized.
+ ///
+
+ public ErrorMessage? ErrorMessage { get; set; }
+
+
+ public int StatusCode { get; set; }
+
+
+ public HttpResponseMessage? RawResponse { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/GenerateCredentialsRequest.cs b/bank-feeds/CodatBankFeeds/Models/Operations/GenerateCredentialsRequest.cs
new file mode 100755
index 000000000..97f856ec4
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/GenerateCredentialsRequest.cs
@@ -0,0 +1,29 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Utils;
+
+
+ public class GenerateCredentialsRequest
+ {
+ [SpeakeasyMetadata("request:mediaType=application/json")]
+ public byte[] RequestBody { get; set; }
+
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=companyId")]
+ public string CompanyId { get; set; }
+
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=connectionId")]
+ public string ConnectionId { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/GenerateCredentialsResponse.cs b/bank-feeds/CodatBankFeeds/Models/Operations/GenerateCredentialsResponse.cs
new file mode 100755
index 000000000..7c9b8b9f7
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/GenerateCredentialsResponse.cs
@@ -0,0 +1,43 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Models.Shared;
+ using System.Net.Http;
+ using System;
+
+
+ public class GenerateCredentialsResponse
+ {
+ ///
+ /// Success
+ ///
+
+ public BankAccountCredentials? BankAccountCredentials { get; set; }
+
+
+ public string? ContentType { get; set; }
+
+ ///
+ /// Your API request was not properly authorized.
+ ///
+
+ public ErrorMessage? ErrorMessage { get; set; }
+
+
+ public int StatusCode { get; set; }
+
+
+ public HttpResponseMessage? RawResponse { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/GetBankAccountMappingRequest.cs b/bank-feeds/CodatBankFeeds/Models/Operations/GetBankAccountMappingRequest.cs
new file mode 100755
index 000000000..60e7651c6
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/GetBankAccountMappingRequest.cs
@@ -0,0 +1,26 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Utils;
+
+
+ public class GetBankAccountMappingRequest
+ {
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=companyId")]
+ public string CompanyId { get; set; }
+
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=connectionId")]
+ public string ConnectionId { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/GetBankAccountMappingResponse.cs b/bank-feeds/CodatBankFeeds/Models/Operations/GetBankAccountMappingResponse.cs
new file mode 100755
index 000000000..5bbfb8037
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/GetBankAccountMappingResponse.cs
@@ -0,0 +1,43 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Models.Shared;
+ using System.Net.Http;
+ using System;
+
+
+ public class GetBankAccountMappingResponse
+ {
+ ///
+ /// Success
+ ///
+
+ public BankFeedMapping? BankFeedMapping { get; set; }
+
+
+ public string? ContentType { get; set; }
+
+ ///
+ /// Your API request was not properly authorized.
+ ///
+
+ public ErrorMessage? ErrorMessage { get; set; }
+
+
+ public int StatusCode { get; set; }
+
+
+ public HttpResponseMessage? RawResponse { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/GetCompanyRequest.cs b/bank-feeds/CodatBankFeeds/Models/Operations/GetCompanyRequest.cs
new file mode 100755
index 000000000..1425b7d45
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/GetCompanyRequest.cs
@@ -0,0 +1,23 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Utils;
+
+
+ public class GetCompanyRequest
+ {
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=companyId")]
+ public string CompanyId { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/GetCompanyResponse.cs b/bank-feeds/CodatBankFeeds/Models/Operations/GetCompanyResponse.cs
new file mode 100755
index 000000000..3057a9914
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/GetCompanyResponse.cs
@@ -0,0 +1,43 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Models.Shared;
+ using System.Net.Http;
+ using System;
+
+
+ public class GetCompanyResponse
+ {
+ ///
+ /// OK
+ ///
+
+ public Company? Company { get; set; }
+
+
+ public string? ContentType { get; set; }
+
+ ///
+ /// Your API request was not properly authorized.
+ ///
+
+ public ErrorMessage? ErrorMessage { get; set; }
+
+
+ public int StatusCode { get; set; }
+
+
+ public HttpResponseMessage? RawResponse { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/GetConnectionRequest.cs b/bank-feeds/CodatBankFeeds/Models/Operations/GetConnectionRequest.cs
new file mode 100755
index 000000000..2f230e9fa
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/GetConnectionRequest.cs
@@ -0,0 +1,26 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Utils;
+
+
+ public class GetConnectionRequest
+ {
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=companyId")]
+ public string CompanyId { get; set; }
+
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=connectionId")]
+ public string ConnectionId { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/GetConnectionResponse.cs b/bank-feeds/CodatBankFeeds/Models/Operations/GetConnectionResponse.cs
new file mode 100755
index 000000000..c3292edb3
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/GetConnectionResponse.cs
@@ -0,0 +1,43 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Models.Shared;
+ using System.Net.Http;
+ using System;
+
+
+ public class GetConnectionResponse
+ {
+ ///
+ /// OK
+ ///
+
+ public Connection? Connection { get; set; }
+
+
+ public string? ContentType { get; set; }
+
+ ///
+ /// Your API request was not properly authorized.
+ ///
+
+ public ErrorMessage? ErrorMessage { get; set; }
+
+
+ public int StatusCode { get; set; }
+
+
+ public HttpResponseMessage? RawResponse { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/GetCreateOperationRequest.cs b/bank-feeds/CodatBankFeeds/Models/Operations/GetCreateOperationRequest.cs
new file mode 100755
index 000000000..a80722902
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/GetCreateOperationRequest.cs
@@ -0,0 +1,29 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Utils;
+
+
+ public class GetCreateOperationRequest
+ {
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=companyId")]
+ public string CompanyId { get; set; }
+
+ ///
+ /// Push operation key.
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=pushOperationKey")]
+ public string PushOperationKey { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/GetCreateOperationResponse.cs b/bank-feeds/CodatBankFeeds/Models/Operations/GetCreateOperationResponse.cs
new file mode 100755
index 000000000..26e318ab6
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/GetCreateOperationResponse.cs
@@ -0,0 +1,43 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Models.Shared;
+ using System.Net.Http;
+ using System;
+
+
+ public class GetCreateOperationResponse
+ {
+
+ public string? ContentType { get; set; }
+
+ ///
+ /// Your API request was not properly authorized.
+ ///
+
+ public ErrorMessage? ErrorMessage { get; set; }
+
+ ///
+ /// OK
+ ///
+
+ public PushOperation? PushOperation { get; set; }
+
+
+ public int StatusCode { get; set; }
+
+
+ public HttpResponseMessage? RawResponse { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/ListBankFeedsRequest.cs b/bank-feeds/CodatBankFeeds/Models/Operations/ListBankFeedsRequest.cs
new file mode 100755
index 000000000..b3be4492f
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/ListBankFeedsRequest.cs
@@ -0,0 +1,26 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Utils;
+
+
+ public class ListBankFeedsRequest
+ {
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=companyId")]
+ public string CompanyId { get; set; }
+
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=connectionId")]
+ public string ConnectionId { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/ListBankFeedsResponse.cs b/bank-feeds/CodatBankFeeds/Models/Operations/ListBankFeedsResponse.cs
new file mode 100755
index 000000000..992612dfb
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/ListBankFeedsResponse.cs
@@ -0,0 +1,43 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Models.Shared;
+ using System.Net.Http;
+ using System;
+
+
+ public class ListBankFeedsResponse
+ {
+ ///
+ /// Success
+ ///
+
+ public BankFeedAccount? BankFeedAccount { get; set; }
+
+
+ public string? ContentType { get; set; }
+
+ ///
+ /// Your API request was not properly authorized.
+ ///
+
+ public ErrorMessage? ErrorMessage { get; set; }
+
+
+ public int StatusCode { get; set; }
+
+
+ public HttpResponseMessage? RawResponse { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/ListCompaniesRequest.cs b/bank-feeds/CodatBankFeeds/Models/Operations/ListCompaniesRequest.cs
new file mode 100755
index 000000000..4c534d98d
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/ListCompaniesRequest.cs
@@ -0,0 +1,44 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Utils;
+
+
+ public class ListCompaniesRequest
+ {
+ ///
+ /// Field to order results by. [Read more](https://docs.codat.io/using-the-api/ordering-results).
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=orderBy")]
+ public string? OrderBy { get; set; }
+
+ ///
+ /// Page number. [Read more](https://docs.codat.io/using-the-api/paging).
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=page")]
+ public int? Page { get; set; }
+
+ ///
+ /// Number of records to return in a page. [Read more](https://docs.codat.io/using-the-api/paging).
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=pageSize")]
+ public int? PageSize { get; set; }
+
+ ///
+ /// Codat query string. [Read more](https://docs.codat.io/using-the-api/querying).
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=query")]
+ public string? Query { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/ListCompaniesResponse.cs b/bank-feeds/CodatBankFeeds/Models/Operations/ListCompaniesResponse.cs
new file mode 100755
index 000000000..dee66029e
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/ListCompaniesResponse.cs
@@ -0,0 +1,43 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Models.Shared;
+ using System.Net.Http;
+ using System;
+
+
+ public class ListCompaniesResponse
+ {
+ ///
+ /// OK
+ ///
+
+ public Companies? Companies { get; set; }
+
+
+ public string? ContentType { get; set; }
+
+ ///
+ /// Your `query` parameter was not correctly formed
+ ///
+
+ public ErrorMessage? ErrorMessage { get; set; }
+
+
+ public int StatusCode { get; set; }
+
+
+ public HttpResponseMessage? RawResponse { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/ListConnectionsRequest.cs b/bank-feeds/CodatBankFeeds/Models/Operations/ListConnectionsRequest.cs
new file mode 100755
index 000000000..0f5a95cea
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/ListConnectionsRequest.cs
@@ -0,0 +1,47 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Utils;
+
+
+ public class ListConnectionsRequest
+ {
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=companyId")]
+ public string CompanyId { get; set; }
+
+ ///
+ /// Field to order results by. [Read more](https://docs.codat.io/using-the-api/ordering-results).
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=orderBy")]
+ public string? OrderBy { get; set; }
+
+ ///
+ /// Page number. [Read more](https://docs.codat.io/using-the-api/paging).
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=page")]
+ public int? Page { get; set; }
+
+ ///
+ /// Number of records to return in a page. [Read more](https://docs.codat.io/using-the-api/paging).
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=pageSize")]
+ public int? PageSize { get; set; }
+
+ ///
+ /// Codat query string. [Read more](https://docs.codat.io/using-the-api/querying).
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=query")]
+ public string? Query { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/ListConnectionsResponse.cs b/bank-feeds/CodatBankFeeds/Models/Operations/ListConnectionsResponse.cs
new file mode 100755
index 000000000..fb06af142
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/ListConnectionsResponse.cs
@@ -0,0 +1,43 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Models.Shared;
+ using System.Net.Http;
+ using System;
+
+
+ public class ListConnectionsResponse
+ {
+ ///
+ /// OK
+ ///
+
+ public Connections? Connections { get; set; }
+
+
+ public string? ContentType { get; set; }
+
+ ///
+ /// Your `query` parameter was not correctly formed
+ ///
+
+ public ErrorMessage? ErrorMessage { get; set; }
+
+
+ public int StatusCode { get; set; }
+
+
+ public HttpResponseMessage? RawResponse { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/ListCreateOperationsRequest.cs b/bank-feeds/CodatBankFeeds/Models/Operations/ListCreateOperationsRequest.cs
new file mode 100755
index 000000000..5ab3fa496
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/ListCreateOperationsRequest.cs
@@ -0,0 +1,47 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Utils;
+
+
+ public class ListCreateOperationsRequest
+ {
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=companyId")]
+ public string CompanyId { get; set; }
+
+ ///
+ /// Field to order results by. [Read more](https://docs.codat.io/using-the-api/ordering-results).
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=orderBy")]
+ public string? OrderBy { get; set; }
+
+ ///
+ /// Page number. [Read more](https://docs.codat.io/using-the-api/paging).
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=page")]
+ public int? Page { get; set; }
+
+ ///
+ /// Number of records to return in a page. [Read more](https://docs.codat.io/using-the-api/paging).
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=pageSize")]
+ public int? PageSize { get; set; }
+
+ ///
+ /// Codat query string. [Read more](https://docs.codat.io/using-the-api/querying).
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=query")]
+ public string? Query { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/ListCreateOperationsResponse.cs b/bank-feeds/CodatBankFeeds/Models/Operations/ListCreateOperationsResponse.cs
new file mode 100755
index 000000000..8d39e0fe0
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/ListCreateOperationsResponse.cs
@@ -0,0 +1,43 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Models.Shared;
+ using System.Net.Http;
+ using System;
+
+
+ public class ListCreateOperationsResponse
+ {
+
+ public string? ContentType { get; set; }
+
+ ///
+ /// Your `query` parameter was not correctly formed
+ ///
+
+ public ErrorMessage? ErrorMessage { get; set; }
+
+ ///
+ /// OK
+ ///
+
+ public ListPushOperations? ListPushOperations { get; set; }
+
+
+ public int StatusCode { get; set; }
+
+
+ public HttpResponseMessage? RawResponse { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/UnlinkConnectionRequest.cs b/bank-feeds/CodatBankFeeds/Models/Operations/UnlinkConnectionRequest.cs
new file mode 100755
index 000000000..e1f4b0b12
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/UnlinkConnectionRequest.cs
@@ -0,0 +1,29 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Utils;
+
+
+ public class UnlinkConnectionRequest
+ {
+ [SpeakeasyMetadata("request:mediaType=application/json")]
+ public UnlinkConnectionRequestBody? RequestBody { get; set; }
+
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=companyId")]
+ public string CompanyId { get; set; }
+
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=connectionId")]
+ public string ConnectionId { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/UnlinkConnectionRequestBody.cs b/bank-feeds/CodatBankFeeds/Models/Operations/UnlinkConnectionRequestBody.cs
new file mode 100755
index 000000000..5f26edaee
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/UnlinkConnectionRequestBody.cs
@@ -0,0 +1,23 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using Newtonsoft.Json;
+
+
+ public class UnlinkConnectionRequestBody
+ {
+ [JsonProperty("status")]
+ public string? Status { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/UnlinkConnectionResponse.cs b/bank-feeds/CodatBankFeeds/Models/Operations/UnlinkConnectionResponse.cs
new file mode 100755
index 000000000..9c9ab3c2e
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/UnlinkConnectionResponse.cs
@@ -0,0 +1,43 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Models.Shared;
+ using System.Net.Http;
+ using System;
+
+
+ public class UnlinkConnectionResponse
+ {
+ ///
+ /// OK
+ ///
+
+ public Connection? Connection { get; set; }
+
+
+ public string? ContentType { get; set; }
+
+ ///
+ /// Your API request was not properly authorized.
+ ///
+
+ public ErrorMessage? ErrorMessage { get; set; }
+
+
+ public int StatusCode { get; set; }
+
+
+ public HttpResponseMessage? RawResponse { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/UpdateBankFeedRequest.cs b/bank-feeds/CodatBankFeeds/Models/Operations/UpdateBankFeedRequest.cs
new file mode 100755
index 000000000..867cd8b3a
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/UpdateBankFeedRequest.cs
@@ -0,0 +1,36 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Models.Shared;
+ using CodatBankFeeds.Utils;
+
+
+ public class UpdateBankFeedRequest
+ {
+ [SpeakeasyMetadata("request:mediaType=application/json")]
+ public BankFeedAccount? BankFeedAccount { get; set; }
+
+ ///
+ /// Unique identifier for an account
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=accountId")]
+ public string AccountId { get; set; }
+
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=companyId")]
+ public string CompanyId { get; set; }
+
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=connectionId")]
+ public string ConnectionId { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/UpdateBankFeedResponse.cs b/bank-feeds/CodatBankFeeds/Models/Operations/UpdateBankFeedResponse.cs
new file mode 100755
index 000000000..e5be28a3d
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/UpdateBankFeedResponse.cs
@@ -0,0 +1,43 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Models.Shared;
+ using System.Net.Http;
+ using System;
+
+
+ public class UpdateBankFeedResponse
+ {
+ ///
+ /// Success
+ ///
+
+ public BankFeedAccount? BankFeedAccount { get; set; }
+
+
+ public string? ContentType { get; set; }
+
+ ///
+ /// Your API request was not properly authorized.
+ ///
+
+ public ErrorMessage? ErrorMessage { get; set; }
+
+
+ public int StatusCode { get; set; }
+
+
+ public HttpResponseMessage? RawResponse { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/UpdateCompanyRequest.cs b/bank-feeds/CodatBankFeeds/Models/Operations/UpdateCompanyRequest.cs
new file mode 100755
index 000000000..20f0a086b
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/UpdateCompanyRequest.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Models.Shared;
+ using CodatBankFeeds.Utils;
+
+
+ public class UpdateCompanyRequest
+ {
+ [SpeakeasyMetadata("request:mediaType=application/json")]
+ public CompanyRequestBody? CompanyRequestBody { get; set; }
+
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=companyId")]
+ public string CompanyId { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Operations/UpdateCompanyResponse.cs b/bank-feeds/CodatBankFeeds/Models/Operations/UpdateCompanyResponse.cs
new file mode 100755
index 000000000..94033802d
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Operations/UpdateCompanyResponse.cs
@@ -0,0 +1,43 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Operations
+{
+ using CodatBankFeeds.Models.Shared;
+ using System.Net.Http;
+ using System;
+
+
+ public class UpdateCompanyResponse
+ {
+ ///
+ /// OK
+ ///
+
+ public Company? Company { get; set; }
+
+
+ public string? ContentType { get; set; }
+
+ ///
+ /// Your API request was not properly authorized.
+ ///
+
+ public ErrorMessage? ErrorMessage { get; set; }
+
+
+ public int StatusCode { get; set; }
+
+
+ public HttpResponseMessage? RawResponse { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/BankAccountCredentials.cs b/bank-feeds/CodatBankFeeds/Models/Shared/BankAccountCredentials.cs
new file mode 100755
index 000000000..080d63446
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/BankAccountCredentials.cs
@@ -0,0 +1,35 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+
+
+ ///
+ /// Result of generate credentials
+ ///
+ public class BankAccountCredentials
+ {
+ ///
+ /// Password to enable the bank feeds platform to securely retrieve transactions.
+ ///
+ [JsonProperty("password")]
+ public string? Password { get; set; }
+
+ ///
+ /// Username used by the bank feeds platform to retrieve transactions
+ ///
+ [JsonProperty("username")]
+ public string? Username { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/BankFeedAccount.cs b/bank-feeds/CodatBankFeeds/Models/Shared/BankFeedAccount.cs
new file mode 100755
index 000000000..3b4eb1179
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/BankFeedAccount.cs
@@ -0,0 +1,131 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+
+
+ ///
+ /// The target bank account in a supported accounting package for ingestion into a bank feed.
+ ///
+ public class BankFeedAccount
+ {
+ ///
+ /// The bank account name
+ ///
+ [JsonProperty("accountName")]
+ public string? AccountName { get; set; }
+
+ ///
+ /// The account number
+ ///
+ [JsonProperty("accountNumber")]
+ public string? AccountNumber { get; set; }
+
+ ///
+ /// The type of bank account e.g. Credit
+ ///
+ [JsonProperty("accountType")]
+ public string? AccountType { get; set; }
+
+ ///
+ /// The latest balance for the bank account
+ ///
+ [JsonProperty("balance")]
+ public float? Balance { get; set; }
+
+ ///
+ /// The currency data type in Codat is the [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code, e.g. _GBP_.
+ ///
+ ///
+ ///
+ /// ## Unknown currencies
+ ///
+ /// In line with the ISO 4217 specification, the code _XXX_ is used when the data source does not return a currency for a transaction.
+ ///
+ /// There are only a very small number of edge cases where this currency code is returned by the Codat system.
+ ///
+ ///
+ [JsonProperty("currency")]
+ public string? Currency { get; set; }
+
+ ///
+ /// In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:
+ ///
+ ///
+ ///
+ /// ```
+ /// 2020-10-08T22:40:50Z
+ /// 2021-01-01T00:00:00
+ /// ```
+ ///
+ ///
+ ///
+ /// When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:
+ ///
+ /// - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
+ /// - Unqualified local time: `2021-11-15T01:00:00`
+ /// - UTC time offsets: `2021-11-15T01:00:00-05:00`
+ ///
+ /// > Time zones
+ /// >
+ /// > Not all dates from Codat will contain information about time zones.
+ /// > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced.
+ ///
+ ///
+ [JsonProperty("feedStartDate")]
+ public string? FeedStartDate { get; set; }
+
+ ///
+ /// Unique ID for the bank feed account
+ ///
+ [JsonProperty("id")]
+ public string Id { get; set; }
+
+ ///
+ /// In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:
+ ///
+ ///
+ ///
+ /// ```
+ /// 2020-10-08T22:40:50Z
+ /// 2021-01-01T00:00:00
+ /// ```
+ ///
+ ///
+ ///
+ /// When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:
+ ///
+ /// - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
+ /// - Unqualified local time: `2021-11-15T01:00:00`
+ /// - UTC time offsets: `2021-11-15T01:00:00-05:00`
+ ///
+ /// > Time zones
+ /// >
+ /// > Not all dates from Codat will contain information about time zones.
+ /// > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced.
+ ///
+ ///
+ [JsonProperty("modifiedDate")]
+ public string? ModifiedDate { get; set; }
+
+ ///
+ /// The sort code
+ ///
+ [JsonProperty("sortCode")]
+ public string? SortCode { get; set; }
+
+ [JsonProperty("status")]
+ public string? Status { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/BankFeedAccountMapping.cs b/bank-feeds/CodatBankFeeds/Models/Shared/BankFeedAccountMapping.cs
new file mode 100755
index 000000000..d7d90e78a
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/BankFeedAccountMapping.cs
@@ -0,0 +1,62 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+
+
+ ///
+ /// A bank feed connection between a source account and a target account.
+ ///
+ public class BankFeedAccountMapping
+ {
+ ///
+ /// In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:
+ ///
+ ///
+ ///
+ /// ```
+ /// 2020-10-08T22:40:50Z
+ /// 2021-01-01T00:00:00
+ /// ```
+ ///
+ ///
+ ///
+ /// When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:
+ ///
+ /// - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
+ /// - Unqualified local time: `2021-11-15T01:00:00`
+ /// - UTC time offsets: `2021-11-15T01:00:00-05:00`
+ ///
+ /// > Time zones
+ /// >
+ /// > Not all dates from Codat will contain information about time zones.
+ /// > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced.
+ ///
+ ///
+ [JsonProperty("feedStartDate")]
+ public string? FeedStartDate { get; set; }
+
+ ///
+ /// Unique ID for the source account
+ ///
+ [JsonProperty("sourceAccountId")]
+ public string? SourceAccountId { get; set; }
+
+ ///
+ /// Unique ID for the target account
+ ///
+ [JsonProperty("targetAccountId")]
+ public string? TargetAccountId { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/BankFeedAccountMappingResponse.cs b/bank-feeds/CodatBankFeeds/Models/Shared/BankFeedAccountMappingResponse.cs
new file mode 100755
index 000000000..a155de385
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/BankFeedAccountMappingResponse.cs
@@ -0,0 +1,47 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+
+
+ ///
+ /// The result from POSTing a Bank Account mapping.
+ ///
+ public class BankFeedAccountMappingResponse
+ {
+ ///
+ /// Error returned during the post request
+ ///
+ [JsonProperty("Error")]
+ public string? Error { get; set; }
+
+ ///
+ /// Status of the POST request.
+ ///
+ [JsonProperty("Status")]
+ public string? Status { get; set; }
+
+ ///
+ /// Unique ID for the source account.
+ ///
+ [JsonProperty("sourceAccountId")]
+ public string? SourceAccountId { get; set; }
+
+ ///
+ /// Unique ID for the target account.
+ ///
+ [JsonProperty("targetAccountId")]
+ public string? TargetAccountId { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/BankFeedMapping.cs b/bank-feeds/CodatBankFeeds/Models/Shared/BankFeedMapping.cs
new file mode 100755
index 000000000..fad168fe2
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/BankFeedMapping.cs
@@ -0,0 +1,111 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+
+ ///
+ /// A bank feed connection between a source account and a target account, including potential target accounts.
+ ///
+ public class BankFeedMapping
+ {
+ ///
+ /// In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:
+ ///
+ ///
+ ///
+ /// ```
+ /// 2020-10-08T22:40:50Z
+ /// 2021-01-01T00:00:00
+ /// ```
+ ///
+ ///
+ ///
+ /// When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:
+ ///
+ /// - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
+ /// - Unqualified local time: `2021-11-15T01:00:00`
+ /// - UTC time offsets: `2021-11-15T01:00:00-05:00`
+ ///
+ /// > Time zones
+ /// >
+ /// > Not all dates from Codat will contain information about time zones.
+ /// > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced.
+ ///
+ ///
+ [JsonProperty("feedStartDate")]
+ public string? FeedStartDate { get; set; }
+
+ ///
+ /// Unique ID for the source account.
+ ///
+ [JsonProperty("sourceAccountId")]
+ public string? SourceAccountId { get; set; }
+
+ ///
+ /// Name for the source account.
+ ///
+ [JsonProperty("sourceAccountName")]
+ public string? SourceAccountName { get; set; }
+
+ ///
+ /// Account number for the source account.
+ ///
+ [JsonProperty("sourceAccountNumber")]
+ public string? SourceAccountNumber { get; set; }
+
+ ///
+ /// Balance for the source account.
+ ///
+ [JsonProperty("sourceBalance")]
+ public string? SourceBalance { get; set; }
+
+ ///
+ /// The currency data type in Codat is the [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code, e.g. _GBP_.
+ ///
+ ///
+ ///
+ /// ## Unknown currencies
+ ///
+ /// In line with the ISO 4217 specification, the code _XXX_ is used when the data source does not return a currency for a transaction.
+ ///
+ /// There are only a very small number of edge cases where this currency code is returned by the Codat system.
+ ///
+ ///
+ [JsonProperty("sourceCurrency")]
+ public string? SourceCurrency { get; set; }
+
+ [JsonProperty("status")]
+ public string? Status { get; set; }
+
+ ///
+ /// Unique ID for the target account in the accounting platform.
+ ///
+ [JsonProperty("targetAccountId")]
+ public string? TargetAccountId { get; set; }
+
+ ///
+ /// Name for the target account in the accounting platform.
+ ///
+ [JsonProperty("targetAccountName")]
+ public string? TargetAccountName { get; set; }
+
+ ///
+ /// An array of potential target accounts.
+ ///
+ [JsonProperty("targetAccountOptions")]
+ public List? TargetAccountOptions { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/Companies.cs b/bank-feeds/CodatBankFeeds/Models/Shared/Companies.cs
new file mode 100755
index 000000000..c01a423d7
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/Companies.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+
+ ///
+ /// OK
+ ///
+ public class Companies
+ {
+ [JsonProperty("_links")]
+ public Links Links { get; set; }
+
+ [JsonProperty("pageNumber")]
+ public int PageNumber { get; set; }
+
+ [JsonProperty("pageSize")]
+ public int PageSize { get; set; }
+
+ [JsonProperty("results")]
+ public List? Results { get; set; }
+
+ [JsonProperty("totalResults")]
+ public int TotalResults { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/Company.cs b/bank-feeds/CodatBankFeeds/Models/Shared/Company.cs
new file mode 100755
index 000000000..cd36c77e5
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/Company.cs
@@ -0,0 +1,120 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+ using System;
+
+
+ ///
+ /// In Codat, a company represents a business sharing access to their data. Each company can have multiple [connections](https://docs.codat.io/bank-feeds-api#/schemas/Connection) to different data sources such as one connection to [Xero](https://docs.codat.io/integrations/accounting/xero/accounting-xero) for accounting data, two connections to [Plaid](https://docs.codat.io/integrations/banking/plaid/banking-plaid) for two bank accounts and a connection to [Zettle](https://docs.codat.io/integrations/commerce/zettle/commerce-zettle) for POS data.
+ ///
+ ///
+ ///
+ /// Typically each company is one of your customers.
+ ///
+ /// When you create a company, you can specify a `name` and we will automatically generate a unique `id` for the company. You can also add a `description` to store any additional information about the company.
+ ///
+ ///
+ public class Company
+ {
+ ///
+ /// In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:
+ ///
+ ///
+ ///
+ /// ```
+ /// 2020-10-08T22:40:50Z
+ /// 2021-01-01T00:00:00
+ /// ```
+ ///
+ ///
+ ///
+ /// When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:
+ ///
+ /// - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
+ /// - Unqualified local time: `2021-11-15T01:00:00`
+ /// - UTC time offsets: `2021-11-15T01:00:00-05:00`
+ ///
+ /// > Time zones
+ /// >
+ /// > Not all dates from Codat will contain information about time zones.
+ /// > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced.
+ ///
+ ///
+ [JsonProperty("created")]
+ public string? Created { get; set; }
+
+ [JsonProperty("createdByUserName")]
+ public string? CreatedByUserName { get; set; }
+
+ [JsonProperty("dataConnections")]
+ public List? DataConnections { get; set; }
+
+ ///
+ /// Additional information about the company. This can be used to store foreign IDs, references, etc.
+ ///
+ [JsonProperty("description")]
+ public string? Description { get; set; }
+
+ ///
+ /// Unique identifier for your SMB in Codat.
+ ///
+ [JsonProperty("id")]
+ public string Id { get; set; }
+
+ ///
+ /// In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:
+ ///
+ ///
+ ///
+ /// ```
+ /// 2020-10-08T22:40:50Z
+ /// 2021-01-01T00:00:00
+ /// ```
+ ///
+ ///
+ ///
+ /// When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:
+ ///
+ /// - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
+ /// - Unqualified local time: `2021-11-15T01:00:00`
+ /// - UTC time offsets: `2021-11-15T01:00:00-05:00`
+ ///
+ /// > Time zones
+ /// >
+ /// > Not all dates from Codat will contain information about time zones.
+ /// > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced.
+ ///
+ ///
+ [JsonProperty("lastSync")]
+ public string? LastSync { get; set; }
+
+ ///
+ /// The name of the company
+ ///
+ [JsonProperty("name")]
+ public string Name { get; set; }
+
+ [Obsolete("This field will be removed in a future release, please migrate away from it as soon as possible")]
+ [JsonProperty("platform")]
+ public string? Platform { get; set; }
+
+ ///
+ /// The `redirect` [Link URL](https://docs.codat.io/auth-flow/authorize-hosted-link) enabling the customer to start their auth flow journey for the company.
+ ///
+ [JsonProperty("redirect")]
+ public string Redirect { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/CompanyRequestBody.cs b/bank-feeds/CodatBankFeeds/Models/Shared/CompanyRequestBody.cs
new file mode 100755
index 000000000..a293e8313
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/CompanyRequestBody.cs
@@ -0,0 +1,32 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+
+
+ public class CompanyRequestBody
+ {
+ ///
+ /// Additional information about the company. This can be used to store foreign IDs, references, etc.
+ ///
+ [JsonProperty("description")]
+ public string? Description { get; set; }
+
+ ///
+ /// Name of company being connected.
+ ///
+ [JsonProperty("name")]
+ public string Name { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/Connection.cs b/bank-feeds/CodatBankFeeds/Models/Shared/Connection.cs
new file mode 100755
index 000000000..5924478c0
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/Connection.cs
@@ -0,0 +1,141 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+
+ ///
+ /// A connection represents a [company's](https://docs.codat.io/bank-feeds-api#/schemas/Company) connection to a data source and allows you to synchronize data (pull and/or push) with that source.
+ ///
+ ///
+ ///
+ /// A company can have multiple data connections depending on the type of data source it is connecting to. For example, a single company can link to:
+ ///
+ /// - [Accounting data](https://docs.codat.io/accounting-api/overview) - 1 active connection.
+ /// - [Banking data](https://docs.codat.io/banking-api/overview) - Multiple active connections.
+ /// - [Commerce data](https://docs.codat.io/commerce-api/overview) - Multiple active connections.
+ /// Any combination of accounting, banking, and commerce data connections is allowed.
+ ///
+ /// Before you can use a data connection to pull or push data, the company must grant you access to their business data by [linking the connection](https://docs.codat.io/auth-flow/overview).
+ ///
+ ///
+ public class Connection
+ {
+ [JsonProperty("additionalProperties")]
+ public object? AdditionalProperties { get; set; }
+
+ [JsonProperty("connectionInfo")]
+ public Dictionary? ConnectionInfo { get; set; }
+
+ ///
+ /// In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:
+ ///
+ ///
+ ///
+ /// ```
+ /// 2020-10-08T22:40:50Z
+ /// 2021-01-01T00:00:00
+ /// ```
+ ///
+ ///
+ ///
+ /// When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:
+ ///
+ /// - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
+ /// - Unqualified local time: `2021-11-15T01:00:00`
+ /// - UTC time offsets: `2021-11-15T01:00:00-05:00`
+ ///
+ /// > Time zones
+ /// >
+ /// > Not all dates from Codat will contain information about time zones.
+ /// > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced.
+ ///
+ ///
+ [JsonProperty("created")]
+ public string Created { get; set; }
+
+ [JsonProperty("dataConnectionErrors")]
+ public List? DataConnectionErrors { get; set; }
+
+ ///
+ /// Unique identifier for a company's data connection.
+ ///
+ [JsonProperty("id")]
+ public string Id { get; set; }
+
+ ///
+ /// A Codat ID representing the integration.
+ ///
+ [JsonProperty("integrationId")]
+ public string IntegrationId { get; set; }
+
+ ///
+ /// A unique four-character ID that identifies the platform of the company's data connection. This ensures continuity if the platform changes its name in the future.
+ ///
+ [JsonProperty("integrationKey")]
+ public string IntegrationKey { get; set; }
+
+ ///
+ /// In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:
+ ///
+ ///
+ ///
+ /// ```
+ /// 2020-10-08T22:40:50Z
+ /// 2021-01-01T00:00:00
+ /// ```
+ ///
+ ///
+ ///
+ /// When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:
+ ///
+ /// - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
+ /// - Unqualified local time: `2021-11-15T01:00:00`
+ /// - UTC time offsets: `2021-11-15T01:00:00-05:00`
+ ///
+ /// > Time zones
+ /// >
+ /// > Not all dates from Codat will contain information about time zones.
+ /// > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced.
+ ///
+ ///
+ [JsonProperty("lastSync")]
+ public string? LastSync { get; set; }
+
+ [JsonProperty("linkUrl")]
+ public string LinkUrl { get; set; }
+
+ [JsonProperty("platformName")]
+ public string PlatformName { get; set; }
+
+ ///
+ /// A source-specific ID used to distinguish between different sources originating from the same data connection. In general, a data connection is a single data source. However, for TrueLayer, `sourceId` is associated with a specific bank and has a many-to-one relationship with the `integrationId`.
+ ///
+ [JsonProperty("sourceId")]
+ public string SourceId { get; set; }
+
+ ///
+ /// The type of platform of the connection.
+ ///
+ [JsonProperty("sourceType")]
+ public ConnectionSourceType SourceType { get; set; }
+
+ ///
+ /// The current authorization status of the data connection.
+ ///
+ [JsonProperty("status")]
+ public DataConnectionStatus Status { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/ConnectionSourceType.cs b/bank-feeds/CodatBankFeeds/Models/Shared/ConnectionSourceType.cs
new file mode 100755
index 000000000..24b7265c5
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/ConnectionSourceType.cs
@@ -0,0 +1,56 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+ using System;
+
+
+ ///
+ /// The type of platform of the connection.
+ ///
+ public enum ConnectionSourceType
+ {
+ [JsonProperty("Accounting")]
+ Accounting,
+ [JsonProperty("Banking")]
+ Banking,
+ [JsonProperty("Commerce")]
+ Commerce,
+ [JsonProperty("Other")]
+ Other,
+ [JsonProperty("Unknown")]
+ Unknown,
+ }
+
+ public static class ConnectionSourceTypeExtension
+ {
+ public static string Value(this ConnectionSourceType value)
+ {
+ return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString();
+ }
+
+ public static ConnectionSourceType ToEnum(this string value)
+ {
+ foreach(var field in typeof(ConnectionSourceType).GetFields())
+ {
+ var attribute = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0] as JsonPropertyAttribute;
+ if (attribute != null && attribute.PropertyName == value)
+ {
+ return (ConnectionSourceType)field.GetValue(null);
+ }
+ }
+
+ throw new Exception($"Unknown value {value} for enum ConnectionSourceType");
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/Connections.cs b/bank-feeds/CodatBankFeeds/Models/Shared/Connections.cs
new file mode 100755
index 000000000..2ade35bf6
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/Connections.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+
+ ///
+ /// OK
+ ///
+ public class Connections
+ {
+ [JsonProperty("_links")]
+ public Links Links { get; set; }
+
+ [JsonProperty("pageNumber")]
+ public int PageNumber { get; set; }
+
+ [JsonProperty("pageSize")]
+ public int PageSize { get; set; }
+
+ [JsonProperty("results")]
+ public List? Results { get; set; }
+
+ [JsonProperty("totalResults")]
+ public int TotalResults { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/CreateBankAccountTransaction.cs b/bank-feeds/CodatBankFeeds/Models/Shared/CreateBankAccountTransaction.cs
new file mode 100755
index 000000000..b9f4ff3d6
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/CreateBankAccountTransaction.cs
@@ -0,0 +1,59 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+
+
+ public class CreateBankAccountTransaction
+ {
+ [JsonProperty("amount")]
+ public float? Amount { get; set; }
+
+ [JsonProperty("balance")]
+ public float? Balance { get; set; }
+
+ ///
+ /// In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:
+ ///
+ ///
+ ///
+ /// ```
+ /// 2020-10-08T22:40:50Z
+ /// 2021-01-01T00:00:00
+ /// ```
+ ///
+ ///
+ ///
+ /// When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:
+ ///
+ /// - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
+ /// - Unqualified local time: `2021-11-15T01:00:00`
+ /// - UTC time offsets: `2021-11-15T01:00:00-05:00`
+ ///
+ /// > Time zones
+ /// >
+ /// > Not all dates from Codat will contain information about time zones.
+ /// > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced.
+ ///
+ ///
+ [JsonProperty("date")]
+ public string? Date { get; set; }
+
+ [JsonProperty("description")]
+ public string? Description { get; set; }
+
+ [JsonProperty("id")]
+ public string? Id { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/CreateBankTransactions.cs b/bank-feeds/CodatBankFeeds/Models/Shared/CreateBankTransactions.cs
new file mode 100755
index 000000000..9930f5c34
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/CreateBankTransactions.cs
@@ -0,0 +1,27 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+
+ public class CreateBankTransactions
+ {
+ [JsonProperty("accountId")]
+ public string? AccountId { get; set; }
+
+ [JsonProperty("transactions")]
+ public List? Transactions { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/CreateBankTransactionsResponse.cs b/bank-feeds/CodatBankFeeds/Models/Shared/CreateBankTransactionsResponse.cs
new file mode 100755
index 000000000..389d0f04d
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/CreateBankTransactionsResponse.cs
@@ -0,0 +1,137 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+ using System;
+
+
+ ///
+ /// Success
+ ///
+ public class CreateBankTransactionsResponse
+ {
+ ///
+ /// Contains a single entry that communicates which record has changed and the manner in which it changed.
+ ///
+ [JsonProperty("changes")]
+ public List? Changes { get; set; }
+
+ ///
+ /// Unique identifier for your SMB in Codat.
+ ///
+ [JsonProperty("companyId")]
+ public string CompanyId { get; set; }
+
+ ///
+ /// In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:
+ ///
+ ///
+ ///
+ /// ```
+ /// 2020-10-08T22:40:50Z
+ /// 2021-01-01T00:00:00
+ /// ```
+ ///
+ ///
+ ///
+ /// When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:
+ ///
+ /// - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
+ /// - Unqualified local time: `2021-11-15T01:00:00`
+ /// - UTC time offsets: `2021-11-15T01:00:00-05:00`
+ ///
+ /// > Time zones
+ /// >
+ /// > Not all dates from Codat will contain information about time zones.
+ /// > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced.
+ ///
+ ///
+ [JsonProperty("completedOnUtc")]
+ public string? CompletedOnUtc { get; set; }
+
+ [JsonProperty("data")]
+ public CreateBankTransactions? Data { get; set; }
+
+ ///
+ /// Unique identifier for a company's data connection.
+ ///
+ [JsonProperty("dataConnectionKey")]
+ public string DataConnectionKey { get; set; }
+
+ ///
+ /// Available Data types
+ ///
+ [JsonProperty("dataType")]
+ public DataType? DataType { get; set; }
+
+ [JsonProperty("errorMessage")]
+ public string? ErrorMessage { get; set; }
+
+ ///
+ /// A unique identifier generated by Codat to represent this single push operation. This identifier can be used to track the status of the push, and should be persisted.
+ ///
+ [JsonProperty("pushOperationKey")]
+ public string PushOperationKey { get; set; }
+
+ ///
+ /// In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:
+ ///
+ ///
+ ///
+ /// ```
+ /// 2020-10-08T22:40:50Z
+ /// 2021-01-01T00:00:00
+ /// ```
+ ///
+ ///
+ ///
+ /// When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:
+ ///
+ /// - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
+ /// - Unqualified local time: `2021-11-15T01:00:00`
+ /// - UTC time offsets: `2021-11-15T01:00:00-05:00`
+ ///
+ /// > Time zones
+ /// >
+ /// > Not all dates from Codat will contain information about time zones.
+ /// > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced.
+ ///
+ ///
+ [JsonProperty("requestedOnUtc")]
+ public string RequestedOnUtc { get; set; }
+
+ ///
+ /// The status of the push operation.
+ ///
+ [JsonProperty("status")]
+ public PushOperationStatus Status { get; set; }
+
+ [JsonProperty("statusCode")]
+ public int StatusCode { get; set; }
+
+ [JsonProperty("timeoutInMinutes")]
+ public int? TimeoutInMinutes { get; set; }
+
+ [Obsolete("This field will be removed in a future release, please migrate away from it as soon as possible")]
+ [JsonProperty("timeoutInSeconds")]
+ public int? TimeoutInSeconds { get; set; }
+
+ ///
+ /// A human-readable object describing validation decisions Codat has made when pushing data into the platform. If a push has failed because of validation errors, they will be detailed here.
+ ///
+ [JsonProperty("validation")]
+ public Validation? Validation { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/DataConnectionError.cs b/bank-feeds/CodatBankFeeds/Models/Shared/DataConnectionError.cs
new file mode 100755
index 000000000..6309aefdb
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/DataConnectionError.cs
@@ -0,0 +1,56 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+
+
+ public class DataConnectionError
+ {
+ [JsonProperty("errorMessage")]
+ public string? ErrorMessage { get; set; }
+
+ ///
+ /// In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:
+ ///
+ ///
+ ///
+ /// ```
+ /// 2020-10-08T22:40:50Z
+ /// 2021-01-01T00:00:00
+ /// ```
+ ///
+ ///
+ ///
+ /// When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:
+ ///
+ /// - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
+ /// - Unqualified local time: `2021-11-15T01:00:00`
+ /// - UTC time offsets: `2021-11-15T01:00:00-05:00`
+ ///
+ /// > Time zones
+ /// >
+ /// > Not all dates from Codat will contain information about time zones.
+ /// > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced.
+ ///
+ ///
+ [JsonProperty("erroredOnUtc")]
+ public string? ErroredOnUtc { get; set; }
+
+ [JsonProperty("statusCode")]
+ public string? StatusCode { get; set; }
+
+ [JsonProperty("statusText")]
+ public string? StatusText { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/DataConnectionStatus.cs b/bank-feeds/CodatBankFeeds/Models/Shared/DataConnectionStatus.cs
new file mode 100755
index 000000000..a38461b39
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/DataConnectionStatus.cs
@@ -0,0 +1,54 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+ using System;
+
+
+ ///
+ /// The current authorization status of the data connection.
+ ///
+ public enum DataConnectionStatus
+ {
+ [JsonProperty("PendingAuth")]
+ PendingAuth,
+ [JsonProperty("Linked")]
+ Linked,
+ [JsonProperty("Unlinked")]
+ Unlinked,
+ [JsonProperty("Deauthorized")]
+ Deauthorized,
+ }
+
+ public static class DataConnectionStatusExtension
+ {
+ public static string Value(this DataConnectionStatus value)
+ {
+ return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString();
+ }
+
+ public static DataConnectionStatus ToEnum(this string value)
+ {
+ foreach(var field in typeof(DataConnectionStatus).GetFields())
+ {
+ var attribute = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0] as JsonPropertyAttribute;
+ if (attribute != null && attribute.PropertyName == value)
+ {
+ return (DataConnectionStatus)field.GetValue(null);
+ }
+ }
+
+ throw new Exception($"Unknown value {value} for enum DataConnectionStatus");
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/DataType.cs b/bank-feeds/CodatBankFeeds/Models/Shared/DataType.cs
new file mode 100755
index 000000000..c8229d6fe
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/DataType.cs
@@ -0,0 +1,130 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+ using System;
+
+
+ ///
+ /// Available Data types
+ ///
+ public enum DataType
+ {
+ [JsonProperty("accountTransactions")]
+ AccountTransactions,
+ [JsonProperty("balanceSheet")]
+ BalanceSheet,
+ [JsonProperty("bankAccounts")]
+ BankAccounts,
+ [JsonProperty("bankTransactions")]
+ BankTransactions,
+ [JsonProperty("billCreditNotes")]
+ BillCreditNotes,
+ [JsonProperty("billPayments")]
+ BillPayments,
+ [JsonProperty("bills")]
+ Bills,
+ [JsonProperty("cashFlowStatement")]
+ CashFlowStatement,
+ [JsonProperty("chartOfAccounts")]
+ ChartOfAccounts,
+ [JsonProperty("company")]
+ Company,
+ [JsonProperty("creditNotes")]
+ CreditNotes,
+ [JsonProperty("customers")]
+ Customers,
+ [JsonProperty("directCosts")]
+ DirectCosts,
+ [JsonProperty("directIncomes")]
+ DirectIncomes,
+ [JsonProperty("invoices")]
+ Invoices,
+ [JsonProperty("items")]
+ Items,
+ [JsonProperty("journalEntries")]
+ JournalEntries,
+ [JsonProperty("journals")]
+ Journals,
+ [JsonProperty("paymentMethods")]
+ PaymentMethods,
+ [JsonProperty("payments")]
+ Payments,
+ [JsonProperty("profitAndLoss")]
+ ProfitAndLoss,
+ [JsonProperty("purchaseOrders")]
+ PurchaseOrders,
+ [JsonProperty("salesOrders")]
+ SalesOrders,
+ [JsonProperty("suppliers")]
+ Suppliers,
+ [JsonProperty("taxRates")]
+ TaxRates,
+ [JsonProperty("trackingCategories")]
+ TrackingCategories,
+ [JsonProperty("transfers")]
+ Transfers,
+ [JsonProperty("banking-accountBalances")]
+ BankingAccountBalances,
+ [JsonProperty("banking-accounts")]
+ BankingAccounts,
+ [JsonProperty("banking-transactionCategories")]
+ BankingTransactionCategories,
+ [JsonProperty("banking-transactions")]
+ BankingTransactions,
+ [JsonProperty("commerce-companyInfo")]
+ CommerceCompanyInfo,
+ [JsonProperty("commerce-customers")]
+ CommerceCustomers,
+ [JsonProperty("commerce-disputes")]
+ CommerceDisputes,
+ [JsonProperty("commerce-locations")]
+ CommerceLocations,
+ [JsonProperty("commerce-orders")]
+ CommerceOrders,
+ [JsonProperty("commerce-paymentMethods")]
+ CommercePaymentMethods,
+ [JsonProperty("commerce-payments")]
+ CommercePayments,
+ [JsonProperty("commerce-productCategories")]
+ CommerceProductCategories,
+ [JsonProperty("commerce-products")]
+ CommerceProducts,
+ [JsonProperty("commerce-taxComponents")]
+ CommerceTaxComponents,
+ [JsonProperty("commerce-transactions")]
+ CommerceTransactions,
+ }
+
+ public static class DataTypeExtension
+ {
+ public static string Value(this DataType value)
+ {
+ return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString();
+ }
+
+ public static DataType ToEnum(this string value)
+ {
+ foreach(var field in typeof(DataType).GetFields())
+ {
+ var attribute = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0] as JsonPropertyAttribute;
+ if (attribute != null && attribute.PropertyName == value)
+ {
+ return (DataType)field.GetValue(null);
+ }
+ }
+
+ throw new Exception($"Unknown value {value} for enum DataType");
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/ErrorMessage.cs b/bank-feeds/CodatBankFeeds/Models/Shared/ErrorMessage.cs
new file mode 100755
index 000000000..0b726cfec
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/ErrorMessage.cs
@@ -0,0 +1,41 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+
+
+ ///
+ /// Your `query` parameter was not correctly formed
+ ///
+ public class ErrorMessage
+ {
+ [JsonProperty("canBeRetried")]
+ public string? CanBeRetried { get; set; }
+
+ [JsonProperty("correlationId")]
+ public string? CorrelationId { get; set; }
+
+ [JsonProperty("detailedErrorCode")]
+ public int? DetailedErrorCode { get; set; }
+
+ [JsonProperty("error")]
+ public string? Error { get; set; }
+
+ [JsonProperty("service")]
+ public string? Service { get; set; }
+
+ [JsonProperty("statusCode")]
+ public int? StatusCode { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/HalRef.cs b/bank-feeds/CodatBankFeeds/Models/Shared/HalRef.cs
new file mode 100755
index 000000000..b70f31d97
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/HalRef.cs
@@ -0,0 +1,23 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+
+
+ public class HalRef
+ {
+ [JsonProperty("href")]
+ public string? Href { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/Links.cs b/bank-feeds/CodatBankFeeds/Models/Shared/Links.cs
new file mode 100755
index 000000000..3da55f8f4
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/Links.cs
@@ -0,0 +1,32 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+
+
+ public class Links
+ {
+ [JsonProperty("current")]
+ public HalRef Current { get; set; }
+
+ [JsonProperty("next")]
+ public HalRef? Next { get; set; }
+
+ [JsonProperty("previous")]
+ public HalRef? Previous { get; set; }
+
+ [JsonProperty("self")]
+ public HalRef Self { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/ListPushOperations.cs b/bank-feeds/CodatBankFeeds/Models/Shared/ListPushOperations.cs
new file mode 100755
index 000000000..a2fea1f9a
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/ListPushOperations.cs
@@ -0,0 +1,39 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+
+ ///
+ /// OK
+ ///
+ public class ListPushOperations
+ {
+ [JsonProperty("_links")]
+ public Links Links { get; set; }
+
+ [JsonProperty("pageNumber")]
+ public int PageNumber { get; set; }
+
+ [JsonProperty("pageSize")]
+ public int PageSize { get; set; }
+
+ [JsonProperty("results")]
+ public List? Results { get; set; }
+
+ [JsonProperty("totalResults")]
+ public int TotalResults { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/PushChangeType.cs b/bank-feeds/CodatBankFeeds/Models/Shared/PushChangeType.cs
new file mode 100755
index 000000000..8416057c9
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/PushChangeType.cs
@@ -0,0 +1,53 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+ using System;
+
+
+ public enum PushChangeType
+ {
+ [JsonProperty("Unknown")]
+ Unknown,
+ [JsonProperty("Created")]
+ Created,
+ [JsonProperty("Modified")]
+ Modified,
+ [JsonProperty("Deleted")]
+ Deleted,
+ [JsonProperty("AttachmentUploaded")]
+ AttachmentUploaded,
+ }
+
+ public static class PushChangeTypeExtension
+ {
+ public static string Value(this PushChangeType value)
+ {
+ return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString();
+ }
+
+ public static PushChangeType ToEnum(this string value)
+ {
+ foreach(var field in typeof(PushChangeType).GetFields())
+ {
+ var attribute = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0] as JsonPropertyAttribute;
+ if (attribute != null && attribute.PropertyName == value)
+ {
+ return (PushChangeType)field.GetValue(null);
+ }
+ }
+
+ throw new Exception($"Unknown value {value} for enum PushChangeType");
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/PushOperation.cs b/bank-feeds/CodatBankFeeds/Models/Shared/PushOperation.cs
new file mode 100755
index 000000000..f15efb8ab
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/PushOperation.cs
@@ -0,0 +1,134 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+ using System;
+
+
+ ///
+ /// OK
+ ///
+ public class PushOperation
+ {
+ ///
+ /// Contains a single entry that communicates which record has changed and the manner in which it changed.
+ ///
+ [JsonProperty("changes")]
+ public List? Changes { get; set; }
+
+ ///
+ /// Unique identifier for your SMB in Codat.
+ ///
+ [JsonProperty("companyId")]
+ public string CompanyId { get; set; }
+
+ ///
+ /// In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:
+ ///
+ ///
+ ///
+ /// ```
+ /// 2020-10-08T22:40:50Z
+ /// 2021-01-01T00:00:00
+ /// ```
+ ///
+ ///
+ ///
+ /// When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:
+ ///
+ /// - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
+ /// - Unqualified local time: `2021-11-15T01:00:00`
+ /// - UTC time offsets: `2021-11-15T01:00:00-05:00`
+ ///
+ /// > Time zones
+ /// >
+ /// > Not all dates from Codat will contain information about time zones.
+ /// > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced.
+ ///
+ ///
+ [JsonProperty("completedOnUtc")]
+ public string? CompletedOnUtc { get; set; }
+
+ ///
+ /// Unique identifier for a company's data connection.
+ ///
+ [JsonProperty("dataConnectionKey")]
+ public string DataConnectionKey { get; set; }
+
+ ///
+ /// Available Data types
+ ///
+ [JsonProperty("dataType")]
+ public DataType? DataType { get; set; }
+
+ [JsonProperty("errorMessage")]
+ public string? ErrorMessage { get; set; }
+
+ ///
+ /// A unique identifier generated by Codat to represent this single push operation. This identifier can be used to track the status of the push, and should be persisted.
+ ///
+ [JsonProperty("pushOperationKey")]
+ public string PushOperationKey { get; set; }
+
+ ///
+ /// In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:
+ ///
+ ///
+ ///
+ /// ```
+ /// 2020-10-08T22:40:50Z
+ /// 2021-01-01T00:00:00
+ /// ```
+ ///
+ ///
+ ///
+ /// When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:
+ ///
+ /// - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
+ /// - Unqualified local time: `2021-11-15T01:00:00`
+ /// - UTC time offsets: `2021-11-15T01:00:00-05:00`
+ ///
+ /// > Time zones
+ /// >
+ /// > Not all dates from Codat will contain information about time zones.
+ /// > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced.
+ ///
+ ///
+ [JsonProperty("requestedOnUtc")]
+ public string RequestedOnUtc { get; set; }
+
+ ///
+ /// The status of the push operation.
+ ///
+ [JsonProperty("status")]
+ public PushOperationStatus Status { get; set; }
+
+ [JsonProperty("statusCode")]
+ public int StatusCode { get; set; }
+
+ [JsonProperty("timeoutInMinutes")]
+ public int? TimeoutInMinutes { get; set; }
+
+ [Obsolete("This field will be removed in a future release, please migrate away from it as soon as possible")]
+ [JsonProperty("timeoutInSeconds")]
+ public int? TimeoutInSeconds { get; set; }
+
+ ///
+ /// A human-readable object describing validation decisions Codat has made when pushing data into the platform. If a push has failed because of validation errors, they will be detailed here.
+ ///
+ [JsonProperty("validation")]
+ public Validation? Validation { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/PushOperationChange.cs b/bank-feeds/CodatBankFeeds/Models/Shared/PushOperationChange.cs
new file mode 100755
index 000000000..a6db81a34
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/PushOperationChange.cs
@@ -0,0 +1,29 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+
+
+ public class PushOperationChange
+ {
+ [JsonProperty("attachmentId")]
+ public string? AttachmentId { get; set; }
+
+ [JsonProperty("recordRef")]
+ public PushOperationRef? RecordRef { get; set; }
+
+ [JsonProperty("type")]
+ public PushChangeType? Type { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/PushOperationRef.cs b/bank-feeds/CodatBankFeeds/Models/Shared/PushOperationRef.cs
new file mode 100755
index 000000000..978682624
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/PushOperationRef.cs
@@ -0,0 +1,29 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+
+
+ public class PushOperationRef
+ {
+ ///
+ /// Available Data types
+ ///
+ [JsonProperty("dataType")]
+ public DataType? DataType { get; set; }
+
+ [JsonProperty("id")]
+ public string? Id { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/PushOperationStatus.cs b/bank-feeds/CodatBankFeeds/Models/Shared/PushOperationStatus.cs
new file mode 100755
index 000000000..0633a61c3
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/PushOperationStatus.cs
@@ -0,0 +1,54 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+ using System;
+
+
+ ///
+ /// The status of the push operation.
+ ///
+ public enum PushOperationStatus
+ {
+ [JsonProperty("Pending")]
+ Pending,
+ [JsonProperty("Failed")]
+ Failed,
+ [JsonProperty("Success")]
+ Success,
+ [JsonProperty("TimedOut")]
+ TimedOut,
+ }
+
+ public static class PushOperationStatusExtension
+ {
+ public static string Value(this PushOperationStatus value)
+ {
+ return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString();
+ }
+
+ public static PushOperationStatus ToEnum(this string value)
+ {
+ foreach(var field in typeof(PushOperationStatus).GetFields())
+ {
+ var attribute = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0] as JsonPropertyAttribute;
+ if (attribute != null && attribute.PropertyName == value)
+ {
+ return (PushOperationStatus)field.GetValue(null);
+ }
+ }
+
+ throw new Exception($"Unknown value {value} for enum PushOperationStatus");
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/Security.cs b/bank-feeds/CodatBankFeeds/Models/Shared/Security.cs
new file mode 100755
index 000000000..5942b28a0
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/Security.cs
@@ -0,0 +1,23 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using CodatBankFeeds.Utils;
+
+
+ public class Security
+ {
+ [SpeakeasyMetadata("security:scheme=true,type=apiKey,subType=header,name=Authorization")]
+ public string AuthHeader { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/TargetAccountOption.cs b/bank-feeds/CodatBankFeeds/Models/Shared/TargetAccountOption.cs
new file mode 100755
index 000000000..a5e37cfa7
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/TargetAccountOption.cs
@@ -0,0 +1,50 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+
+
+ public class TargetAccountOption
+ {
+ ///
+ /// The account number of the account.
+ ///
+ [JsonProperty("accountNumber")]
+ public string? AccountNumber { get; set; }
+
+ ///
+ /// The balance of the account.
+ ///
+ [JsonProperty("balance")]
+ public float? Balance { get; set; }
+
+ ///
+ /// Id of the target account.
+ ///
+ [JsonProperty("id")]
+ public string? Id { get; set; }
+
+ ///
+ /// Name of the target account.
+ ///
+ [JsonProperty("name")]
+ public string? Name { get; set; }
+
+ ///
+ /// The sort code of the account.
+ ///
+ [JsonProperty("sortCode")]
+ public string? SortCode { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/Validation.cs b/bank-feeds/CodatBankFeeds/Models/Shared/Validation.cs
new file mode 100755
index 000000000..98c33d52e
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/Validation.cs
@@ -0,0 +1,30 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+
+ ///
+ /// A human-readable object describing validation decisions Codat has made when pushing data into the platform. If a push has failed because of validation errors, they will be detailed here.
+ ///
+ public class Validation
+ {
+ [JsonProperty("errors")]
+ public List? Errors { get; set; }
+
+ [JsonProperty("warnings")]
+ public List? Warnings { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Models/Shared/ValidationItem.cs b/bank-feeds/CodatBankFeeds/Models/Shared/ValidationItem.cs
new file mode 100755
index 000000000..75148c348
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Models/Shared/ValidationItem.cs
@@ -0,0 +1,29 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Models.Shared
+{
+ using Newtonsoft.Json;
+
+
+ public class ValidationItem
+ {
+ [JsonProperty("itemId")]
+ public string? ItemId { get; set; }
+
+ [JsonProperty("message")]
+ public string? Message { get; set; }
+
+ [JsonProperty("validatorName")]
+ public string? ValidatorName { get; set; }
+
+ }
+
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/SourceAccounts.cs b/bank-feeds/CodatBankFeeds/SourceAccounts.cs
new file mode 100755
index 000000000..3caf19d04
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/SourceAccounts.cs
@@ -0,0 +1,404 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds
+{
+ using CodatBankFeeds.Models.Operations;
+ using CodatBankFeeds.Models.Shared;
+ using CodatBankFeeds.Utils;
+ using Newtonsoft.Json;
+ using System.Net.Http.Headers;
+ using System.Net.Http;
+ using System.Threading.Tasks;
+ using System;
+
+ public interface ISourceAccountsSDK
+ {
+ Task CreateAsync(CreateBankFeedRequest? request = null);
+ Task DeleteAsync(DeleteBankFeedBankAccountRequest? request = null);
+ Task DeleteCredentialsAsync(DeleteBankFeedCredentialsRequest? request = null);
+ Task GenerateCredentialsAsync(GenerateCredentialsRequest request);
+ Task ListAsync(ListBankFeedsRequest? request = null);
+ Task UpdateAsync(UpdateBankFeedRequest? request = null);
+ }
+
+ public class SourceAccountsSDK: ISourceAccountsSDK
+ {
+ public SDKConfig Config { get; private set; }
+ private const string _language = "csharp";
+ private const string _sdkVersion = "0.1.0";
+ private const string _sdkGenVersion = "2.91.4";
+ private const string _openapiDocVersion = "3.0.0";
+ private string _serverUrl = "";
+ private ISpeakeasyHttpClient _defaultClient;
+ private ISpeakeasyHttpClient _securityClient;
+
+ public SourceAccountsSDK(ISpeakeasyHttpClient defaultClient, ISpeakeasyHttpClient securityClient, string serverUrl, SDKConfig config)
+ {
+ _defaultClient = defaultClient;
+ _securityClient = securityClient;
+ _serverUrl = serverUrl;
+ Config = config;
+ }
+
+
+ ///
+ /// Create a bank feed bank account
+ ///
+ ///
+ /// Post a BankFeed BankAccount for a single data source connected. to a single company.
+ ///
+ ///
+ public async Task CreateAsync(CreateBankFeedRequest? request = null)
+ {
+ string baseUrl = _serverUrl;
+ if (baseUrl.EndsWith("/"))
+ {
+ baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
+ }
+ var urlString = URLBuilder.Build(baseUrl, "/companies/{companyId}/connections/{connectionId}/connectionInfo/bankFeedAccounts", request);
+
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString);
+ httpRequest.Headers.Add("user-agent", $"speakeasy-sdk/{_language} {_sdkVersion} {_sdkGenVersion} {_openapiDocVersion}");
+
+ var serializedBody = RequestBodySerializer.Serialize(request, "BankFeedAccount", "json");
+ if (serializedBody != null)
+ {
+ httpRequest.Content = serializedBody;
+ }
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new CreateBankFeedResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.BankFeedAccount = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 400) || (response.StatusCode == 401) || (response.StatusCode == 404) || (response.StatusCode == 429))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.ErrorMessage = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ ///
+ /// Delete bank feed bank account
+ ///
+ ///
+ /// The *delete bank feed bank account* endpoint enables you to remove a source account.
+ ///
+ /// Removing a source account will also remove any mapping between the source bank feed bank accounts and the target bankfeed bank account.
+ ///
+ ///
+ public async Task DeleteAsync(DeleteBankFeedBankAccountRequest? request = null)
+ {
+ string baseUrl = _serverUrl;
+ if (baseUrl.EndsWith("/"))
+ {
+ baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
+ }
+ var urlString = URLBuilder.Build(baseUrl, "/companies/{companyId}/connections/{connectionId}/connectionInfo/bankFeedAccounts/{accountId}", request);
+
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString);
+ httpRequest.Headers.Add("user-agent", $"speakeasy-sdk/{_language} {_sdkVersion} {_sdkGenVersion} {_openapiDocVersion}");
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new DeleteBankFeedBankAccountResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+ if((response.StatusCode == 204))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401) || (response.StatusCode == 429))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.ErrorMessage = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ ///
+ /// Delete all source account credentials
+ ///
+ ///
+ /// The _Delete Bank Account Credentials_ endpoint serves as a comprehensive mechanism for revoking all existing authorization credentials that a company employs to establish its Bank Feed connection.
+ ///
+ /// In cases where multiple credential sets have been generated, a single API call to this endpoint revokes all of them.
+ ///
+ ///
+ public async Task DeleteCredentialsAsync(DeleteBankFeedCredentialsRequest? request = null)
+ {
+ string baseUrl = _serverUrl;
+ if (baseUrl.EndsWith("/"))
+ {
+ baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
+ }
+ var urlString = URLBuilder.Build(baseUrl, "/companies/{companyId}/connections/{connectionId}/connectionInfo/bankFeedAccounts/credentials", request);
+
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Delete, urlString);
+ httpRequest.Headers.Add("user-agent", $"speakeasy-sdk/{_language} {_sdkVersion} {_sdkGenVersion} {_openapiDocVersion}");
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new DeleteBankFeedCredentialsResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+ if((response.StatusCode == 204))
+ {
+
+ return response;
+ }
+ if((response.StatusCode == 401) || (response.StatusCode == 429))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.ErrorMessage = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ ///
+ /// Generate source account credentials
+ ///
+ ///
+ /// The _Generate Bank Account Credentials_ endpoint can be used to generate credentials for QuickBooks Online to use for authentication of the Bank Feed in their portal, each time this is used a new set of credentials will be generated.
+ ///
+ /// The old credentials will still be valid until the revoke credentials endpoint is used, which will revoke all credentials associated to the data connection.
+ ///
+ ///
+ ///
+ public async Task GenerateCredentialsAsync(GenerateCredentialsRequest request)
+ {
+ string baseUrl = _serverUrl;
+ if (baseUrl.EndsWith("/"))
+ {
+ baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
+ }
+ var urlString = URLBuilder.Build(baseUrl, "/companies/{companyId}/connections/{connectionId}/connectionInfo/bankFeedAccounts/credentials", request);
+
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString);
+ httpRequest.Headers.Add("user-agent", $"speakeasy-sdk/{_language} {_sdkVersion} {_sdkGenVersion} {_openapiDocVersion}");
+
+ var serializedBody = RequestBodySerializer.Serialize(request, "RequestBody", "json");
+ if (serializedBody == null)
+ {
+ throw new ArgumentNullException("request body is required");
+ }
+ else
+ {
+ httpRequest.Content = serializedBody;
+ }
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GenerateCredentialsResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.BankAccountCredentials = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 401) || (response.StatusCode == 429))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.ErrorMessage = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ ///
+ /// List bank feed bank accounts
+ ///
+ ///
+ /// The *List bank feed bank accounts* endpoint returns a list of [bank feed accounts](https://docs.codat.io/bank-feeds-api#/schemas/BankFeedAccount) for a given company's connection.
+ ///
+ /// [Bank feed accounts](https://docs.codat.io/bank-feeds-api#/schemas/BankFeedAccount) are the bank's bank account from which transactions are synced into the accounting platform.
+ ///
+ ///
+ ///
+ ///
+ public async Task ListAsync(ListBankFeedsRequest? request = null)
+ {
+ string baseUrl = _serverUrl;
+ if (baseUrl.EndsWith("/"))
+ {
+ baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
+ }
+ var urlString = URLBuilder.Build(baseUrl, "/companies/{companyId}/connections/{connectionId}/connectionInfo/bankFeedAccounts", request);
+
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", $"speakeasy-sdk/{_language} {_sdkVersion} {_sdkGenVersion} {_openapiDocVersion}");
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new ListBankFeedsResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.BankFeedAccount = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 401) || (response.StatusCode == 404) || (response.StatusCode == 429))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.ErrorMessage = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ ///
+ /// Update bank feed bank account
+ ///
+ ///
+ /// The *Update bank feed bank account* endpoint updates a single bank feed bank account for a single data source connected to a single company.
+ ///
+ ///
+ public async Task UpdateAsync(UpdateBankFeedRequest? request = null)
+ {
+ string baseUrl = _serverUrl;
+ if (baseUrl.EndsWith("/"))
+ {
+ baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
+ }
+ var urlString = URLBuilder.Build(baseUrl, "/companies/{companyId}/connections/{connectionId}/connectionInfo/bankFeedAccounts/{accountId}", request);
+
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Patch, urlString);
+ httpRequest.Headers.Add("user-agent", $"speakeasy-sdk/{_language} {_sdkVersion} {_sdkGenVersion} {_openapiDocVersion}");
+
+ var serializedBody = RequestBodySerializer.Serialize(request, "BankFeedAccount", "json");
+ if (serializedBody != null)
+ {
+ httpRequest.Content = serializedBody;
+ }
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new UpdateBankFeedResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.BankFeedAccount = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 401) || (response.StatusCode == 404) || (response.StatusCode == 429))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.ErrorMessage = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Transactions.cs b/bank-feeds/CodatBankFeeds/Transactions.cs
new file mode 100755
index 000000000..b9f9f8598
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Transactions.cs
@@ -0,0 +1,228 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds
+{
+ using CodatBankFeeds.Models.Operations;
+ using CodatBankFeeds.Models.Shared;
+ using CodatBankFeeds.Utils;
+ using Newtonsoft.Json;
+ using System.Net.Http.Headers;
+ using System.Net.Http;
+ using System.Threading.Tasks;
+ using System;
+
+ public interface ITransactionsSDK
+ {
+ Task CreateAsync(CreateBankTransactionsRequest? request = null);
+ Task GetCreateOperationAsync(GetCreateOperationRequest? request = null);
+ Task ListCreateOperationsAsync(ListCreateOperationsRequest? request = null);
+ }
+
+ public class TransactionsSDK: ITransactionsSDK
+ {
+ public SDKConfig Config { get; private set; }
+ private const string _language = "csharp";
+ private const string _sdkVersion = "0.1.0";
+ private const string _sdkGenVersion = "2.91.4";
+ private const string _openapiDocVersion = "3.0.0";
+ private string _serverUrl = "";
+ private ISpeakeasyHttpClient _defaultClient;
+ private ISpeakeasyHttpClient _securityClient;
+
+ public TransactionsSDK(ISpeakeasyHttpClient defaultClient, ISpeakeasyHttpClient securityClient, string serverUrl, SDKConfig config)
+ {
+ _defaultClient = defaultClient;
+ _securityClient = securityClient;
+ _serverUrl = serverUrl;
+ Config = config;
+ }
+
+
+ ///
+ /// Create bank account transactions
+ ///
+ ///
+ /// The *Create bank account transactions* endpoint creates new [bank account transactions](https://docs.codat.io/bank-feeds-api#/schemas/BankTransactions) for a given company's connection.
+ ///
+ /// [Bank account transactions](https://docs.codat.io/bank-feeds-api#/schemas/BankTransactions) are records of monetary amounts that have moved in and out of an SMB's bank account.
+ ///
+ /// **Integration-specific behaviour**
+ ///
+ /// Required data may vary by integration. To see what data to post, first call [Get create bank transaction model](https://docs.codat.io/bank-feeds-api#/operations/get-create-bankTransactions-model).
+ ///
+ /// Check out our [coverage explorer](https://knowledge.codat.io/supported-features/accounting?view=tab-by-data-type&dataType=bankTransactions) for integrations that support creating a bank account transactions.
+ ///
+ ///
+ ///
+ public async Task CreateAsync(CreateBankTransactionsRequest? request = null)
+ {
+ string baseUrl = _serverUrl;
+ if (baseUrl.EndsWith("/"))
+ {
+ baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
+ }
+ var urlString = URLBuilder.Build(baseUrl, "/companies/{companyId}/connections/{connectionId}/push/bankAccounts/{accountId}/bankTransactions", request);
+
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Post, urlString);
+ httpRequest.Headers.Add("user-agent", $"speakeasy-sdk/{_language} {_sdkVersion} {_sdkGenVersion} {_openapiDocVersion}");
+
+ var serializedBody = RequestBodySerializer.Serialize(request, "CreateBankTransactions", "json");
+ if (serializedBody != null)
+ {
+ httpRequest.Content = serializedBody;
+ }
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new Models.Operations.CreateBankTransactionsResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.CreateBankTransactionsResponseValue = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 401) || (response.StatusCode == 404) || (response.StatusCode == 429))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.ErrorMessage = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ ///
+ /// Get create operation
+ ///
+ ///
+ /// Retrieve push operation.
+ ///
+ ///
+ public async Task GetCreateOperationAsync(GetCreateOperationRequest? request = null)
+ {
+ string baseUrl = _serverUrl;
+ if (baseUrl.EndsWith("/"))
+ {
+ baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
+ }
+ var urlString = URLBuilder.Build(baseUrl, "/companies/{companyId}/push/{pushOperationKey}", request);
+
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", $"speakeasy-sdk/{_language} {_sdkVersion} {_sdkGenVersion} {_openapiDocVersion}");
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetCreateOperationResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.PushOperation = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 401) || (response.StatusCode == 404) || (response.StatusCode == 429))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.ErrorMessage = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+
+ ///
+ /// List create operations
+ ///
+ ///
+ /// List create operations.
+ ///
+ ///
+ public async Task ListCreateOperationsAsync(ListCreateOperationsRequest? request = null)
+ {
+ string baseUrl = _serverUrl;
+ if (baseUrl.EndsWith("/"))
+ {
+ baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
+ }
+ var urlString = URLBuilder.Build(baseUrl, "/companies/{companyId}/push", request);
+
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", $"speakeasy-sdk/{_language} {_sdkVersion} {_sdkGenVersion} {_openapiDocVersion}");
+
+
+ var client = _securityClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new ListCreateOperationsResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.ListPushOperations = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ if((response.StatusCode == 400) || (response.StatusCode == 401) || (response.StatusCode == 404) || (response.StatusCode == 429))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.ErrorMessage = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Utils/EnumSerializer.cs b/bank-feeds/CodatBankFeeds/Utils/EnumSerializer.cs
new file mode 100755
index 000000000..feef68c0b
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Utils/EnumSerializer.cs
@@ -0,0 +1,50 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+using System;
+using System.Linq;
+using Newtonsoft.Json;
+
+namespace CodatBankFeeds.Utils
+{
+ internal class EnumSerializer: JsonConverter
+ {
+ public override bool CanConvert(Type objectType) =>
+ objectType.IsEnum;
+
+ public override bool CanRead => false;
+
+ public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer) =>
+ throw new NotImplementedException();
+
+ public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
+ {
+ if (value == null)
+ {
+ writer.WriteValue("null");
+ return;
+ }
+
+ var isInt = false;
+ var attributes = value.GetType().GetMember(value.ToString()).First().CustomAttributes;
+ if(attributes.Count() == 0 || attributes.First().ConstructorArguments.Count() == 0)
+ {
+ isInt = true;
+ }
+ var parsedValue = Utilities.ToString(value);
+ if(isInt)
+ {
+ writer.WriteValue(int.Parse(parsedValue));
+ return;
+ }
+ writer.WriteValue(parsedValue);
+ }
+ }
+}
\ No newline at end of file
diff --git a/bank-feeds/CodatBankFeeds/Utils/FlexibleObjectDeserializer.cs b/bank-feeds/CodatBankFeeds/Utils/FlexibleObjectDeserializer.cs
new file mode 100755
index 000000000..6a7aa12ba
--- /dev/null
+++ b/bank-feeds/CodatBankFeeds/Utils/FlexibleObjectDeserializer.cs
@@ -0,0 +1,44 @@
+
+//------------------------------------------------------------------------------
+//
+// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
+//
+// Changes to this file may cause incorrect behavior and will be lost when
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace CodatBankFeeds.Utils
+{
+ using System;
+ using System.Linq;
+ using System.Collections.Generic;
+ using Newtonsoft.Json;
+ using Newtonsoft.Json.Linq;
+
+ internal class FlexibleObjectDeserializer: JsonConverter
+ {
+ public override bool CanConvert(Type objectType) =>
+ objectType == typeof(object);
+
+ public override bool CanWrite => false;
+
+ public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer)
+ {
+ var token = JToken.ReadFrom(reader);
+
+ if (token is JArray)
+ {
+ return new List