diff --git a/plaid-openapi b/plaid-openapi index cffae023..ed6be40b 160000 --- a/plaid-openapi +++ b/plaid-openapi @@ -1 +1 @@ -Subproject commit cffae0231e2cee04712d81c717ad9b1b5f4861ba +Subproject commit ed6be40bf9504e314af1e3feb67013383c45a22a diff --git a/src/Plaid.OpenApiParser/WebhookConverterMap.sbntxt b/src/Plaid.OpenApiParser/WebhookConverterMap.sbntxt index 2eda099d..334af9db 100644 --- a/src/Plaid.OpenApiParser/WebhookConverterMap.sbntxt +++ b/src/Plaid.OpenApiParser/WebhookConverterMap.sbntxt @@ -5,7 +5,7 @@ namespace Going.Plaid.Converters; /// public partial class {{ prefix }}WebhookBaseConverter : JsonConverter<{{ prefix }}WebhookBase> { - private static readonly Dictionary<({{ prefix }}WebhookType, {{ prefix }}WebhookCode), Type> Map = + private static readonly Dictionary<({{ prefix }}WebhookType, {{ prefix }}WebhookCode), Type> s_map = new() { {{~ for hook in hooks ~}} diff --git a/src/Plaid/BankTransfer/BankTransferCreateRequest.cs b/src/Plaid/BankTransfer/BankTransferCreateRequest.cs index 940fdd29..961cafe2 100644 --- a/src/Plaid/BankTransfer/BankTransferCreateRequest.cs +++ b/src/Plaid/BankTransfer/BankTransferCreateRequest.cs @@ -49,7 +49,7 @@ public partial class BankTransferCreateRequest : RequestBase public string Description { get; set; } = default!; /// - /// Specifies the use case of the transfer. Required for transfers on an ACH network. + /// Specifies the use case of the transfer. Required for transfers on an ACH network. For more details, see ACH SEC codes. /// [JsonPropertyName("ach_class")] public Entity.AchClass? AchClass { get; set; } = default!; diff --git a/src/Plaid/Converters/ProcessorWebhookBaseConverter.Map.cs b/src/Plaid/Converters/ProcessorWebhookBaseConverter.Map.cs index 8e4014e5..04fd34d4 100644 --- a/src/Plaid/Converters/ProcessorWebhookBaseConverter.Map.cs +++ b/src/Plaid/Converters/ProcessorWebhookBaseConverter.Map.cs @@ -5,7 +5,7 @@ namespace Going.Plaid.Converters; /// public partial class ProcessorWebhookBaseConverter : JsonConverter { - private static readonly Dictionary<(ProcessorWebhookType, ProcessorWebhookCode), Type> Map = + private static readonly Dictionary<(ProcessorWebhookType, ProcessorWebhookCode), Type> s_map = new() { [(ProcessorWebhookType.Transactions, ProcessorWebhookCode.TransactionsRemoved)] = typeof(ProcessorTransactionsRemovedWebhook), diff --git a/src/Plaid/Converters/ProcessorWebhookBaseConverter.cs b/src/Plaid/Converters/ProcessorWebhookBaseConverter.cs index e21d7bb8..6ff26a2e 100644 --- a/src/Plaid/Converters/ProcessorWebhookBaseConverter.cs +++ b/src/Plaid/Converters/ProcessorWebhookBaseConverter.cs @@ -16,7 +16,7 @@ public partial class ProcessorWebhookBaseConverter : JsonConverter(enumText); - if (!Map.TryGetValue((type, code), out var webhookType)) + if (!s_map.TryGetValue((type, code), out var webhookType)) { return new ProcessorUndefinedWebhook(type, code) { diff --git a/src/Plaid/Converters/WebhookBaseConverter.Map.cs b/src/Plaid/Converters/WebhookBaseConverter.Map.cs index 5b165f42..92522e9d 100644 --- a/src/Plaid/Converters/WebhookBaseConverter.Map.cs +++ b/src/Plaid/Converters/WebhookBaseConverter.Map.cs @@ -5,7 +5,7 @@ namespace Going.Plaid.Converters; /// public partial class WebhookBaseConverter : JsonConverter { - private static readonly Dictionary<(WebhookType, WebhookCode), Type> Map = + private static readonly Dictionary<(WebhookType, WebhookCode), Type> s_map = new() { [(WebhookType.Screening, WebhookCode.StatusUpdated)] = typeof(ScreeningStatusUpdatedWebhook), @@ -58,6 +58,7 @@ public partial class WebhookBaseConverter : JsonConverter [(WebhookType.LinkDelivery, WebhookCode.LinkCallback)] = typeof(LinkDeliveryCallbackWebhook), [(WebhookType.Item, WebhookCode.UserAccountRevoked)] = typeof(UserAccountRevokedWebhook), [(WebhookType.Statements, WebhookCode.StatementsRefreshComplete)] = typeof(StatementsRefreshCompleteWebhook), + [(WebhookType.CraMonitoring, WebhookCode.InsightsUpdated)] = typeof(MonitoringInsightsWebhook), [(WebhookType.BaseReport, WebhookCode.ProductReady)] = typeof(BaseReportsProductReadyWebhook), [(WebhookType.BaseReport, WebhookCode.Error)] = typeof(BaseReportsErrorWebhook), [(WebhookType.CraIncome, WebhookCode.BankIncomeComplete)] = typeof(CraBankIncomeCompleteWebhook), @@ -75,7 +76,6 @@ public partial class WebhookBaseConverter : JsonConverter [(WebhookType.Link, WebhookCode.SessionFinished)] = typeof(LinkSessionFinishedWebhook), [(WebhookType.Auth, WebhookCode.SmsMicrodepositsVerification)] = typeof(HostedMMDVerificationWebhook), [(WebhookType.DashboardConfiguredAlert, WebhookCode.InstitutionStatusAlertTriggered)] = typeof(InstitutionStatusAlertWebhook), - [(WebhookType.CraMonitoring, WebhookCode.InsightsUpdated)] = typeof(MonitoringInsightsWebhook), [(WebhookType.Assets, WebhookCode.ProductReady)] = typeof(AssetsProductReadyWebhook), [(WebhookType.Assets, WebhookCode.Error)] = typeof(AssetsErrorWebhook), }; diff --git a/src/Plaid/Converters/WebhookBaseConverter.cs b/src/Plaid/Converters/WebhookBaseConverter.cs index f89ca696..d5020cde 100644 --- a/src/Plaid/Converters/WebhookBaseConverter.cs +++ b/src/Plaid/Converters/WebhookBaseConverter.cs @@ -16,7 +16,7 @@ public partial class WebhookBaseConverter : JsonConverter enumText = element.GetProperty("webhook_code").GetString(); var code = EnumConverterFactory.ParseEnumValue(enumText); - if (!Map.TryGetValue((type, code), out var webhookType)) + if (!s_map.TryGetValue((type, code), out var webhookType)) { return new UndefinedWebhook(type, code) { diff --git a/src/Plaid/Cra/CraCheckReportCreateRequest.cs b/src/Plaid/Cra/CraCheckReportCreateRequest.cs index 5816f843..384c84b7 100644 --- a/src/Plaid/Cra/CraCheckReportCreateRequest.cs +++ b/src/Plaid/Cra/CraCheckReportCreateRequest.cs @@ -23,6 +23,12 @@ public partial class CraCheckReportCreateRequest : RequestBase [JsonPropertyName("days_requested")] public int DaysRequested { get; set; } = default!; + /// + /// The minimum number of days of data required for the report to be successfully generated. + /// + [JsonPropertyName("days_required")] + public int? DaysRequired { get; set; } = default!; + /// /// Describes the reason you are generating a Consumer Report for this user. /// diff --git a/src/Plaid/Cra/CraMonitoringInsightsGetResponse.cs b/src/Plaid/Cra/CraMonitoringInsightsGetResponse.cs index fbfc2fda..6bce13de 100644 --- a/src/Plaid/Cra/CraMonitoringInsightsGetResponse.cs +++ b/src/Plaid/Cra/CraMonitoringInsightsGetResponse.cs @@ -6,7 +6,7 @@ namespace Going.Plaid.Cra; public record CraMonitoringInsightsGetResponse : ResponseBase { /// - /// An array of the Monitoring Insights Item + /// An array of Monitoring Insights Items associated with the user. /// [JsonPropertyName("items")] public IReadOnlyList Items { get; init; } = default!; diff --git a/src/Plaid/Cra/CraMonitoringInsightsSubscribeResponse.cs b/src/Plaid/Cra/CraMonitoringInsightsSubscribeResponse.cs index 34ebe46c..9fae229b 100644 --- a/src/Plaid/Cra/CraMonitoringInsightsSubscribeResponse.cs +++ b/src/Plaid/Cra/CraMonitoringInsightsSubscribeResponse.cs @@ -6,7 +6,7 @@ namespace Going.Plaid.Cra; public record CraMonitoringInsightsSubscribeResponse : ResponseBase { /// - /// A unique identifier for the subscription, which can be used for troubleshooting + /// A unique identifier for the subscription. /// [JsonPropertyName("subscription_id")] public string SubscriptionId { get; init; } = default!; diff --git a/src/Plaid/Cra/CraMonitoringInsightsUnsubscribeRequest.cs b/src/Plaid/Cra/CraMonitoringInsightsUnsubscribeRequest.cs index f503b19a..70c75527 100644 --- a/src/Plaid/Cra/CraMonitoringInsightsUnsubscribeRequest.cs +++ b/src/Plaid/Cra/CraMonitoringInsightsUnsubscribeRequest.cs @@ -6,7 +6,7 @@ namespace Going.Plaid.Cra; public partial class CraMonitoringInsightsUnsubscribeRequest : RequestBase { /// - /// A unique identifier for the subscription, which can be used for troubleshooting + /// A unique identifier for the subscription. /// [JsonPropertyName("subscription_id")] public string SubscriptionId { get; set; } = default!; diff --git a/src/Plaid/Cra/PlaidClient.cs b/src/Plaid/Cra/PlaidClient.cs index f0b837b1..0e55c712 100644 --- a/src/Plaid/Cra/PlaidClient.cs +++ b/src/Plaid/Cra/PlaidClient.cs @@ -21,7 +21,7 @@ public sealed partial class PlaidClient /// /// This endpoint allows you to subscribe to insights for a user's linked CRA items, which are updated every 14 days. /// - /// + /// public Task CraMonitoringInsightsSubscribeAsync(Cra.CraMonitoringInsightsSubscribeRequest request) => PostAsync("/cra/monitoring_insights/subscribe", request) .ParseResponseAsync(); @@ -29,7 +29,7 @@ public sealed partial class PlaidClient /// /// This endpoint allows you to unsubscribe from previously subscribed Monitoring Insights. /// - /// + /// public Task CraMonitoringInsightsUnsubscribeAsync(Cra.CraMonitoringInsightsUnsubscribeRequest request) => PostAsync("/cra/monitoring_insights/unsubscribe", request) .ParseResponseAsync(); @@ -37,7 +37,7 @@ public sealed partial class PlaidClient /// /// This endpoint allows you to retrieve a Monitoring Insights report by passing in the user_token referred to in the webhook you received. /// - /// + /// public Task CraMonitoringInsightsGetAsync(Cra.CraMonitoringInsightsGetRequest request) => PostAsync("/cra/monitoring_insights/get", request) .ParseResponseAsync(); @@ -84,7 +84,7 @@ public sealed partial class PlaidClient /// /// /cra/check_report/create creates a Consumer Report powered by Plaid Check. You can call this endpoint to create a new report if consumer_report_permissible_purpose was omitted during Link token creation. If you did provide a consumer_report_permissible_purpose during Link token creation, then Plaid Check will automatically begin creating a Consumer Report once the user completes the Link process, and it is not necessary to call /cra/check_report/create before retrieving the report. - /// /cra/check_report/create can also be used to refresh data in an existing report. A Consumer Report will last for 24 hours before expiring; you should call any /get endpoints on the report before it expires. If a report expires, you can call /cra/check_report/create again to re-generate it. Note that refreshing or regenerating a report is a billable event." + /// /cra/check_report/create can also be used to refresh data in an existing report. A Consumer Report will last for 24 hours before expiring; you should call any /get endpoints on the report before it expires. If a report expires, you can call /cra/check_report/create again to re-generate it. Note that refreshing or regenerating a report is a billable event. /// /// public Task CraCheckReportCreateAsync(Cra.CraCheckReportCreateRequest request) => diff --git a/src/Plaid/Entity/Account.cs b/src/Plaid/Entity/Account.cs index 8974605d..76a3baf8 100644 --- a/src/Plaid/Entity/Account.cs +++ b/src/Plaid/Entity/Account.cs @@ -51,13 +51,13 @@ public record Account public Entity.AccountSubtype? Subtype { get; init; } = default!; /// - /// The current verification status of an Auth Item initiated through Automated or Manual micro-deposits. Returned for Auth Items only. + /// The current verification status of an Auth Item initiated through micro-deposits or database verification. Returned for Auth Items only. /// [JsonPropertyName("verification_status")] public Entity.AccountVerificationStatusEnum? VerificationStatus { get; init; } = default!; /// - /// Insights from performing database verification for the account. + /// Insights from performing database verification for the account. Only returned for Auth Items created via Database Insights. /// [JsonPropertyName("verification_insights")] public Entity.VerificationInsights? VerificationInsights { get; init; } = default!; diff --git a/src/Plaid/Entity/AccountIdentity.cs b/src/Plaid/Entity/AccountIdentity.cs index 8d5a735b..01df6628 100644 --- a/src/Plaid/Entity/AccountIdentity.cs +++ b/src/Plaid/Entity/AccountIdentity.cs @@ -51,13 +51,13 @@ public record AccountIdentity public Entity.AccountSubtype? Subtype { get; init; } = default!; /// - /// The current verification status of an Auth Item initiated through Automated or Manual micro-deposits. Returned for Auth Items only. + /// The current verification status of an Auth Item initiated through micro-deposits or database verification. Returned for Auth Items only. /// [JsonPropertyName("verification_status")] public Entity.AccountIdentityVerificationStatusEnum? VerificationStatus { get; init; } = default!; /// - /// Insights from performing database verification for the account. + /// Insights from performing database verification for the account. Only returned for Auth Items created via Database Insights. /// [JsonPropertyName("verification_insights")] public Entity.VerificationInsights? VerificationInsights { get; init; } = default!; diff --git a/src/Plaid/Entity/AccountIdentityDocumentUpload.cs b/src/Plaid/Entity/AccountIdentityDocumentUpload.cs index fd676322..7e44a7a6 100644 --- a/src/Plaid/Entity/AccountIdentityDocumentUpload.cs +++ b/src/Plaid/Entity/AccountIdentityDocumentUpload.cs @@ -51,13 +51,13 @@ public record AccountIdentityDocumentUpload public Entity.AccountSubtype? Subtype { get; init; } = default!; /// - /// The current verification status of an Auth Item initiated through Automated or Manual micro-deposits. Returned for Auth Items only. + /// The current verification status of an Auth Item initiated through micro-deposits or database verification. Returned for Auth Items only. /// [JsonPropertyName("verification_status")] public Entity.AccountIdentityDocumentUploadVerificationStatusEnum? VerificationStatus { get; init; } = default!; /// - /// Insights from performing database verification for the account. + /// Insights from performing database verification for the account. Only returned for Auth Items created via Database Insights. /// [JsonPropertyName("verification_insights")] public Entity.VerificationInsights? VerificationInsights { get; init; } = default!; diff --git a/src/Plaid/Entity/AccountIdentityDocumentUploadVerificationStatusEnum.cs b/src/Plaid/Entity/AccountIdentityDocumentUploadVerificationStatusEnum.cs index a86c3e09..d8e35bfe 100644 --- a/src/Plaid/Entity/AccountIdentityDocumentUploadVerificationStatusEnum.cs +++ b/src/Plaid/Entity/AccountIdentityDocumentUploadVerificationStatusEnum.cs @@ -1,7 +1,7 @@ namespace Going.Plaid.Entity; /// -/// The current verification status of an Auth Item initiated through Automated or Manual micro-deposits. Returned for Auth Items only. +/// The current verification status of an Auth Item initiated through micro-deposits or database verification. Returned for Auth Items only. /// public enum AccountIdentityDocumentUploadVerificationStatusEnum { @@ -42,25 +42,25 @@ public enum AccountIdentityDocumentUploadVerificationStatusEnum VerificationFailed, /// - /// The Item has successfully been verified using Plaid's data sources. + /// The Item has successfully been verified using Plaid's data sources. Only returned for Auth Items created via Database Match. /// [EnumMember(Value = "database_matched")] DatabaseMatched, /// - /// The Item's ACH numbers have been verified using Plaid's data sources and have strong signal for being valid. Note: Database Insights is currently a beta feature, please contact your account manager for more information. + /// The Item's numbers have been verified using Plaid's data sources and have strong signal for being valid. Only returned for Auth Items created via Database Insights. Note: Database Insights is currently a beta feature, please contact your account manager for more information. /// [EnumMember(Value = "database_insights_pass")] DatabaseInsightsPass, /// - /// The Item's ACH numbers have been verified using Plaid's data sources and have some signal for being valid. Note: Database Insights is currently a beta feature, please contact your account manager for more information. + /// The Item's numbers have been verified using Plaid's data sources and have some signal for being valid. Only returned for Auth Items created via Database Insights. Note: Database Insights is currently a beta feature, please contact your account manager for more information. /// [EnumMember(Value = "database_insights_pass_with_caution")] DatabaseInsightsPassWithCaution, /// - /// The Item's ACH numbers have been verified using Plaid's data sources and have signal for being invalid and/or have no signal for being valid. Note: Database Insights is currently a beta feature, please contact your account manager for more information. + /// The Item's numbers have been verified using Plaid's data sources and have signal for being invalid and/or have no signal for being valid. Only returned for Auth Items created via Database Insights. Note: Database Insights is currently a beta feature, please contact your account manager for more information. /// [EnumMember(Value = "database_insights_fail")] DatabaseInsightsFail, diff --git a/src/Plaid/Entity/AccountIdentityMatchScore.cs b/src/Plaid/Entity/AccountIdentityMatchScore.cs index 3f587eab..1515517e 100644 --- a/src/Plaid/Entity/AccountIdentityMatchScore.cs +++ b/src/Plaid/Entity/AccountIdentityMatchScore.cs @@ -51,13 +51,13 @@ public record AccountIdentityMatchScore public Entity.AccountSubtype? Subtype { get; init; } = default!; /// - /// The current verification status of an Auth Item initiated through Automated or Manual micro-deposits. Returned for Auth Items only. + /// The current verification status of an Auth Item initiated through micro-deposits or database verification. Returned for Auth Items only. /// [JsonPropertyName("verification_status")] public Entity.AccountIdentityMatchScoreVerificationStatusEnum? VerificationStatus { get; init; } = default!; /// - /// Insights from performing database verification for the account. + /// Insights from performing database verification for the account. Only returned for Auth Items created via Database Insights. /// [JsonPropertyName("verification_insights")] public Entity.VerificationInsights? VerificationInsights { get; init; } = default!; diff --git a/src/Plaid/Entity/AccountIdentityMatchScoreVerificationStatusEnum.cs b/src/Plaid/Entity/AccountIdentityMatchScoreVerificationStatusEnum.cs index 2a6d6bc2..49c9f886 100644 --- a/src/Plaid/Entity/AccountIdentityMatchScoreVerificationStatusEnum.cs +++ b/src/Plaid/Entity/AccountIdentityMatchScoreVerificationStatusEnum.cs @@ -1,7 +1,7 @@ namespace Going.Plaid.Entity; /// -/// The current verification status of an Auth Item initiated through Automated or Manual micro-deposits. Returned for Auth Items only. +/// The current verification status of an Auth Item initiated through micro-deposits or database verification. Returned for Auth Items only. /// public enum AccountIdentityMatchScoreVerificationStatusEnum { @@ -42,25 +42,25 @@ public enum AccountIdentityMatchScoreVerificationStatusEnum VerificationFailed, /// - /// The Item has successfully been verified using Plaid's data sources. + /// The Item has successfully been verified using Plaid's data sources. Only returned for Auth Items created via Database Match. /// [EnumMember(Value = "database_matched")] DatabaseMatched, /// - /// The Item's ACH numbers have been verified using Plaid's data sources and have strong signal for being valid. Note: Database Insights is currently a beta feature, please contact your account manager for more information. + /// The Item's numbers have been verified using Plaid's data sources and have strong signal for being valid. Only returned for Auth Items created via Database Insights. Note: Database Insights is currently a beta feature, please contact your account manager for more information. /// [EnumMember(Value = "database_insights_pass")] DatabaseInsightsPass, /// - /// The Item's ACH numbers have been verified using Plaid's data sources and have some signal for being valid. Note: Database Insights is currently a beta feature, please contact your account manager for more information. + /// The Item's numbers have been verified using Plaid's data sources and have some signal for being valid. Only returned for Auth Items created via Database Insights. Note: Database Insights is currently a beta feature, please contact your account manager for more information. /// [EnumMember(Value = "database_insights_pass_with_caution")] DatabaseInsightsPassWithCaution, /// - /// The Item's ACH numbers have been verified using Plaid's data sources and have signal for being invalid and/or have no signal for being valid. Note: Database Insights is currently a beta feature, please contact your account manager for more information. + /// The Item's numbers have been verified using Plaid's data sources and have signal for being invalid and/or have no signal for being valid. Only returned for Auth Items created via Database Insights. Note: Database Insights is currently a beta feature, please contact your account manager for more information. /// [EnumMember(Value = "database_insights_fail")] DatabaseInsightsFail, diff --git a/src/Plaid/Entity/AccountIdentityVerificationStatusEnum.cs b/src/Plaid/Entity/AccountIdentityVerificationStatusEnum.cs index 74a89c46..04635ddc 100644 --- a/src/Plaid/Entity/AccountIdentityVerificationStatusEnum.cs +++ b/src/Plaid/Entity/AccountIdentityVerificationStatusEnum.cs @@ -1,7 +1,7 @@ namespace Going.Plaid.Entity; /// -/// The current verification status of an Auth Item initiated through Automated or Manual micro-deposits. Returned for Auth Items only. +/// The current verification status of an Auth Item initiated through micro-deposits or database verification. Returned for Auth Items only. /// public enum AccountIdentityVerificationStatusEnum { @@ -42,25 +42,25 @@ public enum AccountIdentityVerificationStatusEnum VerificationFailed, /// - /// The Item has successfully been verified using Plaid's data sources. + /// The Item has successfully been verified using Plaid's data sources. Only returned for Auth Items created via Database Match. /// [EnumMember(Value = "database_matched")] DatabaseMatched, /// - /// The Item's ACH numbers have been verified using Plaid's data sources and have strong signal for being valid. Note: Database Insights is currently a beta feature, please contact your account manager for more information. + /// The Item's numbers have been verified using Plaid's data sources and have strong signal for being valid. Only returned for Auth Items created via Database Insights. Note: Database Insights is currently a beta feature, please contact your account manager for more information. /// [EnumMember(Value = "database_insights_pass")] DatabaseInsightsPass, /// - /// The Item's ACH numbers have been verified using Plaid's data sources and have some signal for being valid. Note: Database Insights is currently a beta feature, please contact your account manager for more information. + /// The Item's numbers have been verified using Plaid's data sources and have some signal for being valid. Only returned for Auth Items created via Database Insights. Note: Database Insights is currently a beta feature, please contact your account manager for more information. /// [EnumMember(Value = "database_insights_pass_with_caution")] DatabaseInsightsPassWithCaution, /// - /// The Item's ACH numbers have been verified using Plaid's data sources and have signal for being invalid and/or have no signal for being valid. Note: Database Insights is currently a beta feature, please contact your account manager for more information. + /// The Item's numbers have been verified using Plaid's data sources and have signal for being invalid and/or have no signal for being valid. Only returned for Auth Items created via Database Insights. Note: Database Insights is currently a beta feature, please contact your account manager for more information. /// [EnumMember(Value = "database_insights_fail")] DatabaseInsightsFail, diff --git a/src/Plaid/Entity/AccountVerificationStatusEnum.cs b/src/Plaid/Entity/AccountVerificationStatusEnum.cs index fa9f2f1e..d3d01a07 100644 --- a/src/Plaid/Entity/AccountVerificationStatusEnum.cs +++ b/src/Plaid/Entity/AccountVerificationStatusEnum.cs @@ -1,7 +1,7 @@ namespace Going.Plaid.Entity; /// -/// The current verification status of an Auth Item initiated through Automated or Manual micro-deposits. Returned for Auth Items only. +/// The current verification status of an Auth Item initiated through micro-deposits or database verification. Returned for Auth Items only. /// public enum AccountVerificationStatusEnum { @@ -42,25 +42,25 @@ public enum AccountVerificationStatusEnum VerificationFailed, /// - /// The Item has successfully been verified using Plaid's data sources. + /// The Item has successfully been verified using Plaid's data sources. Only returned for Auth Items created via Database Match. /// [EnumMember(Value = "database_matched")] DatabaseMatched, /// - /// The Item's ACH numbers have been verified using Plaid's data sources and have strong signal for being valid. Note: Database Insights is currently a beta feature, please contact your account manager for more information. + /// The Item's numbers have been verified using Plaid's data sources and have strong signal for being valid. Only returned for Auth Items created via Database Insights. Note: Database Insights is currently a beta feature, please contact your account manager for more information. /// [EnumMember(Value = "database_insights_pass")] DatabaseInsightsPass, /// - /// The Item's ACH numbers have been verified using Plaid's data sources and have some signal for being valid. Note: Database Insights is currently a beta feature, please contact your account manager for more information. + /// The Item's numbers have been verified using Plaid's data sources and have some signal for being valid. Only returned for Auth Items created via Database Insights. Note: Database Insights is currently a beta feature, please contact your account manager for more information. /// [EnumMember(Value = "database_insights_pass_with_caution")] DatabaseInsightsPassWithCaution, /// - /// The Item's ACH numbers have been verified using Plaid's data sources and have signal for being invalid and/or have no signal for being valid. Note: Database Insights is currently a beta feature, please contact your account manager for more information. + /// The Item's numbers have been verified using Plaid's data sources and have signal for being invalid and/or have no signal for being valid. Only returned for Auth Items created via Database Insights. Note: Database Insights is currently a beta feature, please contact your account manager for more information. /// [EnumMember(Value = "database_insights_fail")] DatabaseInsightsFail, diff --git a/src/Plaid/Entity/AchClass.cs b/src/Plaid/Entity/AchClass.cs index ff30ec28..df91fada 100644 --- a/src/Plaid/Entity/AchClass.cs +++ b/src/Plaid/Entity/AchClass.cs @@ -1,7 +1,7 @@ namespace Going.Plaid.Entity; /// -/// Specifies the use case of the transfer. Required for transfers on an ACH network. +/// Specifies the use case of the transfer. Required for transfers on an ACH network. For more details, see ACH SEC codes. /// public enum AchClass { diff --git a/src/Plaid/Entity/Activity.cs b/src/Plaid/Entity/Activity.cs index 24289815..095f4f3a 100644 --- a/src/Plaid/Entity/Activity.cs +++ b/src/Plaid/Entity/Activity.cs @@ -47,4 +47,10 @@ public record Activity [JsonPropertyName("scopes")] public Entity.Scopes? Scopes { get; init; } = default!; + /// + /// Enum representing the entity authenticating the user. + /// + [JsonPropertyName("authentication")] + public Entity.ItemCreateAuthentication? Authentication { get; init; } = default!; + } \ No newline at end of file diff --git a/src/Plaid/Entity/BankTransfer.cs b/src/Plaid/Entity/BankTransfer.cs index 187c8b47..50307aac 100644 --- a/src/Plaid/Entity/BankTransfer.cs +++ b/src/Plaid/Entity/BankTransfer.cs @@ -12,7 +12,7 @@ public record BankTransfer public string Id { get; init; } = default!; /// - /// Specifies the use case of the transfer. Required for transfers on an ACH network. + /// Specifies the use case of the transfer. Required for transfers on an ACH network. For more details, see ACH SEC codes. /// [JsonPropertyName("ach_class")] public Entity.AchClass AchClass { get; init; } = default!; diff --git a/src/Plaid/Entity/BaseReportAccount.cs b/src/Plaid/Entity/BaseReportAccount.cs index 37df3f46..6706cc32 100644 --- a/src/Plaid/Entity/BaseReportAccount.cs +++ b/src/Plaid/Entity/BaseReportAccount.cs @@ -31,6 +31,12 @@ public record BaseReportAccount [JsonPropertyName("mask")] public string? Mask { get; init; } = default!; + /// + /// Base Report metadata about the extracted account. + /// + [JsonPropertyName("metadata")] + public Entity.BaseReportAccountMetadata Metadata { get; init; } = default!; + /// /// The name of the account, either assigned by the user or by the financial institution itself /// diff --git a/src/Plaid/Entity/BaseReportAccountInsights.cs b/src/Plaid/Entity/BaseReportAccountInsights.cs index e25fa5f0..340d0374 100644 --- a/src/Plaid/Entity/BaseReportAccountInsights.cs +++ b/src/Plaid/Entity/BaseReportAccountInsights.cs @@ -36,7 +36,7 @@ public record BaseReportAccountInsights public IReadOnlyList? LongestGapBetweenTransactions { get; init; } = default!; /// - /// Customers must transition from longest_gap_between_transactions by October 31st 2024. Longest gap between sequential transactions in a time period. This array can include multiple time periods. + /// Customers must transition from longest_gap_between_transactions by January 31st 2025. Longest gap between sequential transactions in a time period. This array can include multiple time periods. /// [JsonPropertyName("longest_gaps_between_transactions")] public IReadOnlyList? LongestGapsBetweenTransactions { get; init; } = default!; @@ -54,7 +54,7 @@ public record BaseReportAccountInsights public IReadOnlyList? AverageInflowAmount { get; init; } = default!; /// - /// Customers must transition from average_inflow_amount by October 31st 2024. Average amount of debit transactions into the account in a time period. This array will be empty for non-depository accounts. This field only takes into account USD transactions from the account. + /// Customers must transition from average_inflow_amount by January 31st 2025. Average amount of debit transactions into the account in a time period. This array will be empty for non-depository accounts. This field only takes into account USD transactions from the account. /// [JsonPropertyName("average_inflow_amounts")] public IReadOnlyList? AverageInflowAmounts { get; init; } = default!; @@ -72,7 +72,7 @@ public record BaseReportAccountInsights public IReadOnlyList? AverageOutflowAmount { get; init; } = default!; /// - /// Customers must transition from average_outflow_amount by October 31st 2024. Average amount of transactions out of the account in a time period. This array will be empty for non-depository accounts. This field only takes into account USD transactions from the account. + /// Customers must transition from average_outflow_amount by January 31st 2025. Average amount of transactions out of the account in a time period. This array will be empty for non-depository accounts. This field only takes into account USD transactions from the account. /// [JsonPropertyName("average_outflow_amounts")] public IReadOnlyList? AverageOutflowAmounts { get; init; } = default!; diff --git a/src/Plaid/Entity/BaseReportAccountMetadata.cs b/src/Plaid/Entity/BaseReportAccountMetadata.cs new file mode 100644 index 00000000..d0a1adcc --- /dev/null +++ b/src/Plaid/Entity/BaseReportAccountMetadata.cs @@ -0,0 +1,20 @@ +namespace Going.Plaid.Entity; + +/// +/// Base Report metadata about the extracted account. +/// +public record BaseReportAccountMetadata +{ + /// + /// The date of the earliest extracted transaction, in ISO 8601 format ("yyyy-mm-dd"). + /// + [JsonPropertyName("start_date")] + public DateOnly? StartDate { get; init; } = default!; + + /// + /// The date of the most recent extracted transaction, in ISO 8601 format ("yyyy-mm-dd"). + /// + [JsonPropertyName("end_date")] + public DateOnly? EndDate { get; init; } = default!; + +} diff --git a/src/Plaid/Entity/BaseReportAttributes.cs b/src/Plaid/Entity/BaseReportAttributes.cs index 4854fedc..beef62af 100644 --- a/src/Plaid/Entity/BaseReportAttributes.cs +++ b/src/Plaid/Entity/BaseReportAttributes.cs @@ -12,7 +12,7 @@ public record BaseReportAttributes public int? NsfOverdraftTransactionsCount { get; init; } = default!; /// - /// Our prediction on whether the account is a primary account. Only one account per account type across the items connected will have a value of true. + /// Prediction indicator of whether the account is a primary account. Only one account per account type across the items connected will have a value of true. /// [JsonPropertyName("is_primary_account")] public bool? IsPrimaryAccount { get; init; } = default!; @@ -23,4 +23,52 @@ public record BaseReportAttributes [JsonPropertyName("primary_account_score")] public decimal? PrimaryAccountScore { get; init; } = default!; + /// + /// Total amount of debit transactions into the account in the time period of the report. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. + /// + [JsonPropertyName("total_inflow_amount")] + public Entity.TotalInflowAmount? TotalInflowAmount { get; init; } = default!; + + /// + /// Total amount of debit transactions into the account in the last 30 days. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. + /// + [JsonPropertyName("total_inflow_amount_30d")] + public Entity.TotalInflowAmount30d? TotalInflowAmount30d { get; init; } = default!; + + /// + /// Total amount of debit transactions into the account in the last 60 days. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. + /// + [JsonPropertyName("total_inflow_amount_60d")] + public Entity.TotalInflowAmount60d? TotalInflowAmount60d { get; init; } = default!; + + /// + /// Total amount of debit transactions into the account in the last 90 days. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. + /// + [JsonPropertyName("total_inflow_amount_90d")] + public Entity.TotalInflowAmount90d? TotalInflowAmount90d { get; init; } = default!; + + /// + /// Total amount of credit transactions into the account in the time period of the report. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. + /// + [JsonPropertyName("total_outflow_amount")] + public Entity.TotalOutflowAmount? TotalOutflowAmount { get; init; } = default!; + + /// + /// Total amount of credit transactions into the account in the last 30 days. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. + /// + [JsonPropertyName("total_outflow_amount_30d")] + public Entity.TotalOutflowAmount30d? TotalOutflowAmount30d { get; init; } = default!; + + /// + /// Total amount of credit transactions into the account in the last 60 days. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. + /// + [JsonPropertyName("total_outflow_amount_60d")] + public Entity.TotalOutflowAmount60d? TotalOutflowAmount60d { get; init; } = default!; + + /// + /// Total amount of credit transactions into the account in the last 90 days. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. + /// + [JsonPropertyName("total_outflow_amount_90d")] + public Entity.TotalOutflowAmount90d? TotalOutflowAmount90d { get; init; } = default!; + } diff --git a/src/Plaid/Entity/BaseReportWarning.cs b/src/Plaid/Entity/BaseReportWarning.cs index fb4ed23e..83b06112 100644 --- a/src/Plaid/Entity/BaseReportWarning.cs +++ b/src/Plaid/Entity/BaseReportWarning.cs @@ -21,6 +21,6 @@ public record BaseReportWarning /// An error object and associated item_id used to identify a specific Item and error when a batch operation operating on multiple Items has encountered an error in one of the Items. /// [JsonPropertyName("cause")] - public Entity.Cause Cause { get; init; } = default!; + public Entity.Cause? Cause { get; init; } = default!; } diff --git a/src/Plaid/Entity/ConsentEventCode.cs b/src/Plaid/Entity/ConsentEventCode.cs index fdc51bd7..9f3bf6e8 100644 --- a/src/Plaid/Entity/ConsentEventCode.cs +++ b/src/Plaid/Entity/ConsentEventCode.cs @@ -8,8 +8,8 @@ public enum ConsentEventCode /// /// /// - [EnumMember(Value = "PLAID_END_USER_PRIVACY_POLICY")] - PlaidEndUserPrivacyPolicy, + [EnumMember(Value = "USER_AGREEMENT")] + UserAgreement, /// /// diff --git a/src/Plaid/Entity/ConsumerReportUserIdentity.cs b/src/Plaid/Entity/ConsumerReportUserIdentity.cs index 8a26b4ef..47ad6b31 100644 --- a/src/Plaid/Entity/ConsumerReportUserIdentity.cs +++ b/src/Plaid/Entity/ConsumerReportUserIdentity.cs @@ -37,7 +37,7 @@ public class ConsumerReportUserIdentity /// /// To be provided in the format "yyyy-mm-dd". - /// This field is required as of Oct 21, 2024 for any clients who became Plaid Check customers on or after Oct 1, 2024. + /// This field is required for any clients who became Plaid Check customers on or after Oct 1, 2024. /// This field will be required for all Plaid Check customers as of Feb 1, 2025. /// [JsonPropertyName("date_of_birth")] diff --git a/src/Plaid/Entity/CraBankIncomeAccount.cs b/src/Plaid/Entity/CraBankIncomeAccount.cs index 97c4410b..2b43f7fd 100644 --- a/src/Plaid/Entity/CraBankIncomeAccount.cs +++ b/src/Plaid/Entity/CraBankIncomeAccount.cs @@ -20,6 +20,12 @@ public record CraBankIncomeAccount [JsonPropertyName("mask")] public string? Mask { get; init; } = default!; + /// + /// An object containing metadata about the extracted account. + /// + [JsonPropertyName("metadata")] + public Entity.CraBankIncomeAccountMetadata Metadata { get; init; } = default!; + /// /// The name of the bank account. /// diff --git a/src/Plaid/Entity/CraBankIncomeAccountMetadata.cs b/src/Plaid/Entity/CraBankIncomeAccountMetadata.cs new file mode 100644 index 00000000..52a5e094 --- /dev/null +++ b/src/Plaid/Entity/CraBankIncomeAccountMetadata.cs @@ -0,0 +1,20 @@ +namespace Going.Plaid.Entity; + +/// +/// An object containing metadata about the extracted account. +/// +public record CraBankIncomeAccountMetadata +{ + /// + /// The date of the earliest extracted transaction, in ISO 8601 format ("yyyy-mm-dd"). + /// + [JsonPropertyName("start_date")] + public DateOnly? StartDate { get; init; } = default!; + + /// + /// The date of the most recent extracted transaction, in ISO 8601 format ("yyyy-mm-dd"). + /// + [JsonPropertyName("end_date")] + public DateOnly? EndDate { get; init; } = default!; + +} diff --git a/src/Plaid/Entity/CraMonitoringInsightsItem.cs b/src/Plaid/Entity/CraMonitoringInsightsItem.cs index d657880a..b364f2cf 100644 --- a/src/Plaid/Entity/CraMonitoringInsightsItem.cs +++ b/src/Plaid/Entity/CraMonitoringInsightsItem.cs @@ -18,7 +18,7 @@ public record CraMonitoringInsightsItem public string ItemId { get; init; } = default!; /// - /// An object representing the status of the Monitoring Insights Item and potential reasons in case of non-available statuses + /// An object with details of the Monitoring Insights Item's status. /// [JsonPropertyName("status")] public Entity.MonitoringInsightsItemStatus Status { get; init; } = default!; diff --git a/src/Plaid/Entity/CraPartnerInsightsItemAccount.cs b/src/Plaid/Entity/CraPartnerInsightsItemAccount.cs index 5a587f0c..65f2b626 100644 --- a/src/Plaid/Entity/CraPartnerInsightsItemAccount.cs +++ b/src/Plaid/Entity/CraPartnerInsightsItemAccount.cs @@ -21,6 +21,12 @@ public record CraPartnerInsightsItemAccount [JsonPropertyName("mask")] public string? Mask { get; init; } = default!; + /// + /// An object containing metadata about the extracted account. + /// + [JsonPropertyName("metadata")] + public Entity.CraPartnerInsightsItemAccountMetadata Metadata { get; init; } = default!; + /// /// The name of the account /// diff --git a/src/Plaid/Entity/CraPartnerInsightsItemAccountMetadata.cs b/src/Plaid/Entity/CraPartnerInsightsItemAccountMetadata.cs new file mode 100644 index 00000000..0f87f478 --- /dev/null +++ b/src/Plaid/Entity/CraPartnerInsightsItemAccountMetadata.cs @@ -0,0 +1,20 @@ +namespace Going.Plaid.Entity; + +/// +/// An object containing metadata about the extracted account. +/// +public record CraPartnerInsightsItemAccountMetadata +{ + /// + /// The date of the earliest extracted transaction, in ISO 8601 format ("yyyy-mm-dd"). + /// + [JsonPropertyName("start_date")] + public DateOnly? StartDate { get; init; } = default!; + + /// + /// The date of the most recent extracted transaction, in ISO 8601 format ("yyyy-mm-dd"). + /// + [JsonPropertyName("end_date")] + public DateOnly? EndDate { get; init; } = default!; + +} diff --git a/src/Plaid/Entity/ExternalPaymentInitiationConsentOptions.cs b/src/Plaid/Entity/ExternalPaymentInitiationConsentOptions.cs index 4eef0577..ce1f33e4 100644 --- a/src/Plaid/Entity/ExternalPaymentInitiationConsentOptions.cs +++ b/src/Plaid/Entity/ExternalPaymentInitiationConsentOptions.cs @@ -1,7 +1,7 @@ namespace Going.Plaid.Entity; /// -/// Additional payment consent options +/// (Deprecated) Additional payment consent options /// public class ExternalPaymentInitiationConsentOptions { diff --git a/src/Plaid/Entity/IdentityVerification.cs b/src/Plaid/Entity/IdentityVerification.cs index 677f828f..6f55b431 100644 --- a/src/Plaid/Entity/IdentityVerification.cs +++ b/src/Plaid/Entity/IdentityVerification.cs @@ -100,12 +100,24 @@ public record IdentityVerification [JsonPropertyName("risk_check")] public Entity.RiskCheckDetails? RiskCheck { get; init; } = default!; + /// + /// Additional information for the verify_sms step. + /// + [JsonPropertyName("verify_sms")] + public Entity.VerifySMSDetails? VerifySms { get; init; } = default!; + /// /// ID of the associated screening. /// [JsonPropertyName("watchlist_screening_id")] public string? WatchlistScreeningId { get; init; } = default!; + /// + /// ID of the associated Beacon User. + /// + [JsonPropertyName("beacon_user_id")] + public string? BeaconUserId { get; init; } = default!; + /// /// An ISO8601 formatted timestamp. /// diff --git a/src/Plaid/Entity/IncomeSourcesCounts.cs b/src/Plaid/Entity/IncomeSourcesCounts.cs index 008233bf..d74f5ff2 100644 --- a/src/Plaid/Entity/IncomeSourcesCounts.cs +++ b/src/Plaid/Entity/IncomeSourcesCounts.cs @@ -1,7 +1,7 @@ namespace Going.Plaid.Entity; /// -/// An object representing insights about the number of income sources +/// Details about the number of income sources /// public record IncomeSourcesCounts { diff --git a/src/Plaid/Entity/InstitutionsGetRequestOptions.cs b/src/Plaid/Entity/InstitutionsGetRequestOptions.cs index fda37aae..2433dcd8 100644 --- a/src/Plaid/Entity/InstitutionsGetRequestOptions.cs +++ b/src/Plaid/Entity/InstitutionsGetRequestOptions.cs @@ -24,7 +24,7 @@ public class InstitutionsGetRequestOptions public bool? Oauth { get; set; } = default!; /// - /// When true, return the institution's homepage URL, logo and primary brand color. + /// When true, return the institution's homepage URL, logo and primary brand color. Not all institutions' logos are available. /// Note that Plaid does not own any of the logos shared by the API, and that by accessing or using these logos, you agree that you are doing so at your own risk and will, if necessary, obtain all required permissions from the appropriate rights holders and adhere to any applicable usage guidelines. Plaid disclaims all express or implied warranties with respect to the logos. /// [JsonPropertyName("include_optional_metadata")] diff --git a/src/Plaid/Entity/Item.cs b/src/Plaid/Entity/Item.cs index 8a9ad124..2c5ec3c1 100644 --- a/src/Plaid/Entity/Item.cs +++ b/src/Plaid/Entity/Item.cs @@ -17,12 +17,6 @@ public record Item [JsonPropertyName("institution_id")] public string? InstitutionId { get; init; } = default!; - /// - /// The date and time when the Item was created, in ISO 8601 format. - /// - [JsonPropertyName("created_at")] - public DateTimeOffset? CreatedAt { get; init; } = default!; - /// /// The URL registered to receive webhooks for the Item. /// @@ -59,19 +53,6 @@ public record Item [JsonPropertyName("consented_products")] public IReadOnlyList? ConsentedProducts { get; init; } = default!; - /// - /// A list of use cases that the user has consented to for the Item via Data Transparency Messaging. - /// You can see the full list of use cases or update the list of use cases to request at any time via the Link Customization section of the Plaid Dashboard. - /// - [JsonPropertyName("consented_use_cases")] - public IReadOnlyList? ConsentedUseCases { get; init; } = default!; - - /// - /// A list of data scopes that the user has consented to for the Item via Data Transparency Messaging. These are based on the consented_products; see the full mapping of data scopes and products. - /// - [JsonPropertyName("consented_data_scopes")] - public IReadOnlyList? ConsentedDataScopes { get; init; } = default!; - /// /// The date and time at which the Item's access consent will expire, in ISO 8601 format /// diff --git a/src/Plaid/Entity/ItemCreateAuthentication.cs b/src/Plaid/Entity/ItemCreateAuthentication.cs new file mode 100644 index 00000000..f7626a8c --- /dev/null +++ b/src/Plaid/Entity/ItemCreateAuthentication.cs @@ -0,0 +1,32 @@ +namespace Going.Plaid.Entity; + +/// +/// Enum representing the entity authenticating the user. +/// +public enum ItemCreateAuthentication +{ + /// + /// + /// + [EnumMember(Value = "UNKNOWN")] + Unknown, + + /// + /// + /// + [EnumMember(Value = "DATA_PARTNER")] + DataPartner, + + /// + /// + /// + [EnumMember(Value = "PLAID")] + Plaid, + + /// + /// Catch-all for unknown values returned by Plaid. If you encounter this, please check if there is a later version of the Going.Plaid library. + /// + [EnumMember(Value = "undefined")] + Undefined, + +} diff --git a/src/Plaid/Entity/ItemStatusTransactions.cs b/src/Plaid/Entity/ItemStatusTransactions.cs index e06c5a66..c5577654 100644 --- a/src/Plaid/Entity/ItemStatusTransactions.cs +++ b/src/Plaid/Entity/ItemStatusTransactions.cs @@ -6,13 +6,13 @@ namespace Going.Plaid.Entity; public record ItemStatusTransactions { /// - /// ISO 8601 timestamp of the last successful transactions update for the Item. The status will update each time Plaid successfully connects with the institution, regardless of whether any new data is available in the update. + /// ISO 8601 timestamp of the last successful transactions update for the Item. The status will update each time Plaid successfully connects with the institution, regardless of whether any new data is available in the update. This field does not reflect transactions updates performed by non-Transactions products (e.g. Signal). /// [JsonPropertyName("last_successful_update")] public DateTimeOffset? LastSuccessfulUpdate { get; init; } = default!; /// - /// ISO 8601 timestamp of the last failed transactions update for the Item. The status will update each time Plaid fails an attempt to connect with the institution, regardless of whether any new data is available in the update. + /// ISO 8601 timestamp of the last failed transactions update for the Item. The status will update each time Plaid fails an attempt to connect with the institution, regardless of whether any new data is available in the update. This field does not reflect transactions updates performed by non-Transactions products (e.g. Signal). /// [JsonPropertyName("last_failed_update")] public DateTimeOffset? LastFailedUpdate { get; init; } = default!; diff --git a/src/Plaid/Entity/ItemWithConsentFields.cs b/src/Plaid/Entity/ItemWithConsentFields.cs new file mode 100644 index 00000000..f1bcd800 --- /dev/null +++ b/src/Plaid/Entity/ItemWithConsentFields.cs @@ -0,0 +1,87 @@ +namespace Going.Plaid.Entity; + +/// +/// Metadata about the Item +/// +public record ItemWithConsentFields +{ + /// + /// The Plaid Item ID. The item_id is always unique; linking the same account at the same institution twice will result in two Items with different item_id values. Like all Plaid identifiers, the item_id is case-sensitive. + /// + [JsonPropertyName("item_id")] + public string? ItemId { get; init; } = default!; + + /// + /// The Plaid Institution ID associated with the Item. Field is null for Items created via Same Day Micro-deposits. + /// + [JsonPropertyName("institution_id")] + public string? InstitutionId { get; init; } = default!; + + /// + /// The URL registered to receive webhooks for the Item. + /// + [JsonPropertyName("webhook")] + public string? Webhook { get; init; } = default!; + + /// + /// Errors are identified by error_code and categorized by error_type. Use these in preference to HTTP status codes to identify and handle specific errors. HTTP status codes are set and provide the broadest categorization of errors: 4xx codes are for developer- or user-related errors, and 5xx codes are for Plaid-related errors, and the status will be 2xx in non-error cases. An Item with a non-null error object will only be part of an API response when calling /item/get to view Item status. Otherwise, error fields will be null if no error has occurred; if an error has occurred, an error code will be returned instead. + /// + [JsonPropertyName("error")] + public Entity.PlaidError? Error { get; init; } = default!; + + /// + /// A list of products available for the Item that have not yet been accessed. The contents of this array will be mutually exclusive with billed_products. + /// + [JsonPropertyName("available_products")] + public IReadOnlyList? AvailableProducts { get; init; } = default!; + + /// + /// A list of products that have been billed for the Item. The contents of this array will be mutually exclusive with available_products. Note - billed_products is populated in all environments but only requests in Production are billed. Also note that products that are billed on a pay-per-call basis rather than a pay-per-Item basis, such as balance, will not appear here. + /// + [JsonPropertyName("billed_products")] + public IReadOnlyList? BilledProducts { get; init; } = default!; + + /// + /// A list of products added to the Item. In almost all cases, this will be the same as the billed_products field. For some products, it is possible for the product to be added to an Item but not yet billed (e.g. Assets, before /asset_report/create has been called, or Auth or Identity when added as Optional Products but before their endpoints have been called), in which case the product may appear in products but not in billed_products. + /// + [JsonPropertyName("products")] + public IReadOnlyList? Products { get; init; } = default!; + + /// + /// A list of products that the user has consented to for the Item via Data Transparency Messaging. This will consist of all products where both of the following are true: the user has consented to the required data scopes for that product and you have Production access for that product. + /// + [JsonPropertyName("consented_products")] + public IReadOnlyList? ConsentedProducts { get; init; } = default!; + + /// + /// The date and time at which the Item's access consent will expire, in ISO 8601 format + /// + [JsonPropertyName("consent_expiration_time")] + public DateTimeOffset? ConsentExpirationTime { get; init; } = default!; + + /// + /// Indicates whether an Item requires user interaction to be updated, which can be the case for Items with some forms of two-factor authentication. + /// + [JsonPropertyName("update_type")] + public Entity.ItemWithConsentFieldsUpdateTypeEnum? UpdateType { get; init; } = default!; + + /// + /// The date and time when the Item was created, in ISO 8601 format. + /// + [JsonPropertyName("created_at")] + public DateTimeOffset? CreatedAt { get; init; } = default!; + + /// + /// A list of use cases that the user has consented to for the Item via Data Transparency Messaging. + /// You can see the full list of use cases or update the list of use cases to request at any time via the Link Customization section of the Plaid Dashboard. + /// + [JsonPropertyName("consented_use_cases")] + public IReadOnlyList? ConsentedUseCases { get; init; } = default!; + + /// + /// A list of data scopes that the user has consented to for the Item via Data Transparency Messaging. These are based on the consented_products; see the full mapping of data scopes and products. + /// + [JsonPropertyName("consented_data_scopes")] + public IReadOnlyList? ConsentedDataScopes { get; init; } = default!; + +} diff --git a/src/Plaid/Entity/ItemWithConsentFieldsUpdateTypeEnum.cs b/src/Plaid/Entity/ItemWithConsentFieldsUpdateTypeEnum.cs new file mode 100644 index 00000000..d8ea4278 --- /dev/null +++ b/src/Plaid/Entity/ItemWithConsentFieldsUpdateTypeEnum.cs @@ -0,0 +1,26 @@ +namespace Going.Plaid.Entity; + +/// +/// Indicates whether an Item requires user interaction to be updated, which can be the case for Items with some forms of two-factor authentication. +/// +public enum ItemWithConsentFieldsUpdateTypeEnum +{ + /// + /// Item can be updated in the background + /// + [EnumMember(Value = "background")] + Background, + + /// + /// Item requires user interaction to be updated + /// + [EnumMember(Value = "user_present_required")] + UserPresentRequired, + + /// + /// Catch-all for unknown values returned by Plaid. If you encounter this, please check if there is a later version of the Going.Plaid library. + /// + [EnumMember(Value = "undefined")] + Undefined, + +} diff --git a/src/Plaid/Entity/LinkTokenCreateHostedLink.cs b/src/Plaid/Entity/LinkTokenCreateHostedLink.cs index 186ec3d9..75a2d564 100644 --- a/src/Plaid/Entity/LinkTokenCreateHostedLink.cs +++ b/src/Plaid/Entity/LinkTokenCreateHostedLink.cs @@ -1,7 +1,7 @@ namespace Going.Plaid.Entity; /// -/// Configuration parameters for Hosted Link. To request access to Hosted Link, contact your account manager. +/// Configuration parameters for Hosted Link. To enable the session for Hosted Link, send this object in the request. It can be empty. /// public class LinkTokenCreateHostedLink { diff --git a/src/Plaid/Entity/LinkTokenCreateRequestCraOptions.cs b/src/Plaid/Entity/LinkTokenCreateRequestCraOptions.cs index 023b1730..239a6191 100644 --- a/src/Plaid/Entity/LinkTokenCreateRequestCraOptions.cs +++ b/src/Plaid/Entity/LinkTokenCreateRequestCraOptions.cs @@ -11,6 +11,12 @@ public class LinkTokenCreateRequestCraOptions [JsonPropertyName("days_requested")] public int DaysRequested { get; set; } = default!; + /// + /// The minimum number of days of data required for the report to be successfully generated. + /// + [JsonPropertyName("days_required")] + public int? DaysRequired { get; set; } = default!; + /// /// Specifies options for initializing Link for use with the Credit Partner Insights product. /// diff --git a/src/Plaid/Entity/LinkTokenCreateRequestPaymentConfiguration.cs b/src/Plaid/Entity/LinkTokenCreateRequestPaymentConfiguration.cs index 97186c9d..0fbfa6da 100644 --- a/src/Plaid/Entity/LinkTokenCreateRequestPaymentConfiguration.cs +++ b/src/Plaid/Entity/LinkTokenCreateRequestPaymentConfiguration.cs @@ -11,4 +11,10 @@ public class LinkTokenCreateRequestPaymentConfiguration [JsonPropertyName("amount")] public string Amount { get; set; } = default!; + /// + /// The description of the transfer that provides the payment context. The max length is 256. + /// + [JsonPropertyName("description")] + public string? Description { get; set; } = default!; + } diff --git a/src/Plaid/Entity/LoanPaymentsCounts.cs b/src/Plaid/Entity/LoanPaymentsCounts.cs index 5a0e6f16..5816f6ef 100644 --- a/src/Plaid/Entity/LoanPaymentsCounts.cs +++ b/src/Plaid/Entity/LoanPaymentsCounts.cs @@ -1,7 +1,7 @@ namespace Going.Plaid.Entity; /// -/// An object representing the insights in the number of loan payments +/// Details regarding the number of loan payments /// public record LoanPaymentsCounts { diff --git a/src/Plaid/Entity/LoanPaymentsMerchantCounts.cs b/src/Plaid/Entity/LoanPaymentsMerchantCounts.cs index a9b8632b..3269819a 100644 --- a/src/Plaid/Entity/LoanPaymentsMerchantCounts.cs +++ b/src/Plaid/Entity/LoanPaymentsMerchantCounts.cs @@ -1,7 +1,7 @@ namespace Going.Plaid.Entity; /// -/// An object representing the insights in the number of unique loan payment merchants +/// Details regarding the number of unique loan payment merchants /// public record LoanPaymentsMerchantCounts { diff --git a/src/Plaid/Entity/MonitoringIncomeInsights.cs b/src/Plaid/Entity/MonitoringIncomeInsights.cs index 9241de15..e2765aaf 100644 --- a/src/Plaid/Entity/MonitoringIncomeInsights.cs +++ b/src/Plaid/Entity/MonitoringIncomeInsights.cs @@ -6,13 +6,13 @@ namespace Going.Plaid.Entity; public record MonitoringIncomeInsights { /// - /// An object representing the insights about the total monthly income + /// Details about about the total monthly income /// [JsonPropertyName("total_monthly_income")] public Entity.TotalMonthlyIncomeInsights TotalMonthlyIncome { get; init; } = default!; /// - /// An object representing insights about the number of income sources + /// Details about the number of income sources /// [JsonPropertyName("income_sources_counts")] public Entity.IncomeSourcesCounts IncomeSourcesCounts { get; init; } = default!; diff --git a/src/Plaid/Entity/MonitoringInsightsItemStatus.cs b/src/Plaid/Entity/MonitoringInsightsItemStatus.cs index 9bf195d6..44a6e6df 100644 --- a/src/Plaid/Entity/MonitoringInsightsItemStatus.cs +++ b/src/Plaid/Entity/MonitoringInsightsItemStatus.cs @@ -1,7 +1,7 @@ namespace Going.Plaid.Entity; /// -/// An object representing the status of the Monitoring Insights Item and potential reasons in case of non-available statuses +/// An object with details of the Monitoring Insights Item's status. /// public record MonitoringInsightsItemStatus { diff --git a/src/Plaid/Entity/MonitoringLoanInsights.cs b/src/Plaid/Entity/MonitoringLoanInsights.cs index e3d55cae..d442f634 100644 --- a/src/Plaid/Entity/MonitoringLoanInsights.cs +++ b/src/Plaid/Entity/MonitoringLoanInsights.cs @@ -6,7 +6,7 @@ namespace Going.Plaid.Entity; public record MonitoringLoanInsights { /// - /// An object representing the insights in the number of loan payments + /// Details regarding the number of loan payments /// [JsonPropertyName("loan_payments_counts")] public Entity.LoanPaymentsCounts LoanPaymentsCounts { get; init; } = default!; @@ -18,7 +18,7 @@ public record MonitoringLoanInsights public decimal LoanDisbursementsCount { get; init; } = default!; /// - /// An object representing the insights in the number of unique loan payment merchants + /// Details regarding the number of unique loan payment merchants /// [JsonPropertyName("loan_payment_merchants_counts")] public Entity.LoanPaymentsMerchantCounts LoanPaymentMerchantsCounts { get; init; } = default!; diff --git a/src/Plaid/Entity/Originator.cs b/src/Plaid/Entity/Originator.cs index e21fe8c1..96625ed9 100644 --- a/src/Plaid/Entity/Originator.cs +++ b/src/Plaid/Entity/Originator.cs @@ -23,4 +23,10 @@ public record Originator [JsonPropertyName("company_name")] public string CompanyName { get; init; } = default!; + /// + /// List of outstanding requirements for scaled platform originators. Only populated when transfer_diligence_status is more_information_required. + /// + [JsonPropertyName("outstanding_requirements")] + public IReadOnlyList? OutstandingRequirements { get; init; } = default!; + } diff --git a/src/Plaid/Entity/PaymentInitiationConsentPayerDetails.cs b/src/Plaid/Entity/PaymentInitiationConsentPayerDetails.cs new file mode 100644 index 00000000..d8e7a5fa --- /dev/null +++ b/src/Plaid/Entity/PaymentInitiationConsentPayerDetails.cs @@ -0,0 +1,45 @@ +namespace Going.Plaid.Entity; + +/// +/// An object representing the payment consent payer details. +/// Payer name and account numbers are required to lock the account to which the consent can be created. +/// +public class PaymentInitiationConsentPayerDetails +{ + /// + /// The name of the payer as it appears in their bank account + /// + [JsonPropertyName("name")] + public string Name { get; set; } = default!; + + /// + /// The counterparty's bank account numbers. Exactly one of IBAN or BACS data is required. + /// + [JsonPropertyName("numbers")] + public Entity.PaymentInitiationConsentPayerNumbers Numbers { get; set; } = default!; + + /// + /// The optional address of the payment recipient's bank account. Required by most institutions outside of the UK. + /// + [JsonPropertyName("address")] + public Entity.PaymentInitiationAddress? Address { get; set; } = default!; + + /// + /// The payer's birthdate, in ISO 8601 (YYYY-MM-DD) format. + /// + [JsonPropertyName("date_of_birth")] + public DateOnly? DateOfBirth { get; set; } = default!; + + /// + /// The payer's phone numbers in E.164 format: +{countrycode}{number} + /// + [JsonPropertyName("phone_numbers")] + public IReadOnlyList? PhoneNumbers { get; set; } = default!; + + /// + /// The payer's emails + /// + [JsonPropertyName("emails")] + public IReadOnlyList? Emails { get; set; } = default!; + +} diff --git a/src/Plaid/Entity/PaymentInitiationConsentPayerNumbers.cs b/src/Plaid/Entity/PaymentInitiationConsentPayerNumbers.cs new file mode 100644 index 00000000..1700d4af --- /dev/null +++ b/src/Plaid/Entity/PaymentInitiationConsentPayerNumbers.cs @@ -0,0 +1,20 @@ +namespace Going.Plaid.Entity; + +/// +/// The counterparty's bank account numbers. Exactly one of IBAN or BACS data is required. +/// +public class PaymentInitiationConsentPayerNumbers +{ + /// + /// An optional object used to restrict the accounts used for payments. If provided, the end user will be able to send payments only from the specified bank account. + /// + [JsonPropertyName("bacs")] + public Entity.PaymentInitiationOptionalRestrictionBacs? Bacs { get; set; } = default!; + + /// + /// International Bank Account Number (IBAN). + /// + [JsonPropertyName("iban")] + public string? Iban { get; set; } = default!; + +} diff --git a/src/Plaid/Entity/PaymentInitiationConsentScope.cs b/src/Plaid/Entity/PaymentInitiationConsentScope.cs index dc09fe9b..6be56a92 100644 --- a/src/Plaid/Entity/PaymentInitiationConsentScope.cs +++ b/src/Plaid/Entity/PaymentInitiationConsentScope.cs @@ -1,7 +1,7 @@ namespace Going.Plaid.Entity; /// -/// Payment consent scope. Defines possible directions for payments made with the given consent. +/// This field is deprecated in favor of the consent type field. Consents are required to have a single type. /// public enum PaymentInitiationConsentScope { diff --git a/src/Plaid/Entity/PaymentInitiationConsentType.cs b/src/Plaid/Entity/PaymentInitiationConsentType.cs new file mode 100644 index 00000000..384d08dd --- /dev/null +++ b/src/Plaid/Entity/PaymentInitiationConsentType.cs @@ -0,0 +1,26 @@ +namespace Going.Plaid.Entity; + +/// +/// Payment consent type. Defines possible use case for payments made with the given consent. +/// +public enum PaymentInitiationConsentType +{ + /// + /// Allows moving money between accounts owned by the same user. + /// + [EnumMember(Value = "SWEEPING")] + Sweeping, + + /// + /// Allows initiating payments from the user's account to third parties. + /// + [EnumMember(Value = "COMMERCIAL")] + Commercial, + + /// + /// Catch-all for unknown values returned by Plaid. If you encounter this, please check if there is a later version of the Going.Plaid library. + /// + [EnumMember(Value = "undefined")] + Undefined, + +} diff --git a/src/Plaid/Entity/PendingDisconnectWebhookReason.cs b/src/Plaid/Entity/PendingDisconnectWebhookReason.cs index 51f7c0bb..be1e54a6 100644 --- a/src/Plaid/Entity/PendingDisconnectWebhookReason.cs +++ b/src/Plaid/Entity/PendingDisconnectWebhookReason.cs @@ -6,11 +6,17 @@ namespace Going.Plaid.Entity; public enum PendingDisconnectWebhookReason { /// - /// When an institution migrates to API or a different integration, the PENDING_DISCONNECT webhook will be fired 7 days before the existing Item is scheduled for disconnection. It is recommended to send all Items associated with a given institution through update mode if any Item triggers a PENDING_DISCONNECT webhook with a reason of INSTITUTION_MIGRATION. + /// The institution is moving to API or to a different integration. For example, this can occur when an institution moves from a non-OAuth integration to an OAuth integration. /// [EnumMember(Value = "INSTITUTION_MIGRATION")] InstitutionMigration, + /// + /// The consent on an Item associated with a US or CA institution is about to expire. + /// + [EnumMember(Value = "INSTITUTION_TOKEN_EXPIRATION")] + InstitutionTokenExpiration, + /// /// Catch-all for unknown values returned by Plaid. If you encounter this, please check if there is a later version of the Going.Plaid library. /// diff --git a/src/Plaid/Entity/PrismCashScore.cs b/src/Plaid/Entity/PrismCashScore.cs index 2946d319..0a3febff 100644 --- a/src/Plaid/Entity/PrismCashScore.cs +++ b/src/Plaid/Entity/PrismCashScore.cs @@ -6,11 +6,17 @@ namespace Going.Plaid.Entity; public record PrismCashScore { /// - /// The version of Prism Data's cash score model used. + /// The version of Prism Data's cash score model used. This field is deprecated in favor of model_version. /// [JsonPropertyName("version")] public int Version { get; init; } = default!; + /// + /// The version of Prism Data's cash score model used. + /// + [JsonPropertyName("model_version")] + public string? ModelVersion { get; init; } = default!; + /// /// The score returned by Prism Data. Ranges from 1-999, with higher score indicating lower risk. /// diff --git a/src/Plaid/Entity/PrismFirstDetect.cs b/src/Plaid/Entity/PrismFirstDetect.cs index 6cac46f8..3d7b0fe0 100644 --- a/src/Plaid/Entity/PrismFirstDetect.cs +++ b/src/Plaid/Entity/PrismFirstDetect.cs @@ -6,11 +6,17 @@ namespace Going.Plaid.Entity; public record PrismFirstDetect { /// - /// The version of Prism Data's FirstDetect model used. + /// The version of Prism Data's FirstDetect model used. This field is deprecated in favor of model_version. /// [JsonPropertyName("version")] public int Version { get; init; } = default!; + /// + /// The version of Prism Data's FirstDetect model used. + /// + [JsonPropertyName("model_version")] + public string? ModelVersion { get; init; } = default!; + /// /// The score returned by Prism Data. Ranges from 1-999, with higher score indicating lower risk. /// diff --git a/src/Plaid/Entity/Products.cs b/src/Plaid/Entity/Products.cs index 776fd095..0e199892 100644 --- a/src/Plaid/Entity/Products.cs +++ b/src/Plaid/Entity/Products.cs @@ -173,6 +173,12 @@ public enum Products [EnumMember(Value = "cra_partner_insights")] CraPartnerInsights, + /// + /// + /// + [EnumMember(Value = "cra_network_insights")] + CraNetworkInsights, + /// /// /// diff --git a/src/Plaid/Entity/RecurringTransfer.cs b/src/Plaid/Entity/RecurringTransfer.cs index 9c88926e..6bf18c37 100644 --- a/src/Plaid/Entity/RecurringTransfer.cs +++ b/src/Plaid/Entity/RecurringTransfer.cs @@ -49,7 +49,7 @@ public record RecurringTransfer public Entity.TransferRecurringStatus Status { get; init; } = default!; /// - /// Specifies the use case of the transfer. Required for transfers on an ACH network. + /// Specifies the use case of the transfer. Required for transfers on an ACH network. For more details, see ACH SEC codes. /// [JsonPropertyName("ach_class")] public Entity.AchClass? AchClass { get; init; } = default!; diff --git a/src/Plaid/Entity/SMSVerification.cs b/src/Plaid/Entity/SMSVerification.cs new file mode 100644 index 00000000..241327db --- /dev/null +++ b/src/Plaid/Entity/SMSVerification.cs @@ -0,0 +1,56 @@ +namespace Going.Plaid.Entity; + +/// +/// Additional information for the individual SMS verification. +/// +public record SMSVerification +{ + /// + /// The outcome status for the individual SMS verification. + /// + [JsonPropertyName("status")] + public Entity.SMSVerificationStatus Status { get; init; } = default!; + + /// + /// The attempt field begins with 1 and increments with each subsequent SMS verification. + /// + [JsonPropertyName("attempt")] + public int Attempt { get; init; } = default!; + + /// + /// A phone number in E.164 format. + /// + [JsonPropertyName("phone_number")] + public string? PhoneNumber { get; init; } = default!; + + /// + /// The number of delivery attempts made within the verification to send the SMS code to the user. Each delivery attempt represents the user taking action from the front end UI to request creation and delivery of a new SMS verification code, or to resend an existing SMS verification code. There is a limit of 3 delivery attempts per verification. + /// + [JsonPropertyName("delivery_attempt_count")] + public int DeliveryAttemptCount { get; init; } = default!; + + /// + /// The number of attempts made by the user within the verification to verify the SMS code by entering it into the front end UI. There is a limit of 3 solve attempts per verification. + /// + [JsonPropertyName("solve_attempt_count")] + public int SolveAttemptCount { get; init; } = default!; + + /// + /// An ISO8601 formatted timestamp. + /// + [JsonPropertyName("initially_sent_at")] + public DateTimeOffset? InitiallySentAt { get; init; } = default!; + + /// + /// An ISO8601 formatted timestamp. + /// + [JsonPropertyName("last_sent_at")] + public DateTimeOffset? LastSentAt { get; init; } = default!; + + /// + /// An ISO8601 formatted timestamp. + /// + [JsonPropertyName("redacted_at")] + public DateTimeOffset? RedactedAt { get; init; } = default!; + +} diff --git a/src/Plaid/Entity/SMSVerificationStatus.cs b/src/Plaid/Entity/SMSVerificationStatus.cs new file mode 100644 index 00000000..9b22c31b --- /dev/null +++ b/src/Plaid/Entity/SMSVerificationStatus.cs @@ -0,0 +1,38 @@ +namespace Going.Plaid.Entity; + +/// +/// The outcome status for the individual SMS verification. +/// +public enum SMSVerificationStatus +{ + /// + /// + /// + [EnumMember(Value = "pending")] + Pending, + + /// + /// + /// + [EnumMember(Value = "success")] + Success, + + /// + /// + /// + [EnumMember(Value = "failed")] + Failed, + + /// + /// + /// + [EnumMember(Value = "canceled")] + Canceled, + + /// + /// Catch-all for unknown values returned by Plaid. If you encounter this, please check if there is a later version of the Going.Plaid library. + /// + [EnumMember(Value = "undefined")] + Undefined, + +} diff --git a/src/Plaid/Entity/StudentLoan.cs b/src/Plaid/Entity/StudentLoan.cs index fca6d6c0..b1f464f2 100644 --- a/src/Plaid/Entity/StudentLoan.cs +++ b/src/Plaid/Entity/StudentLoan.cs @@ -59,6 +59,12 @@ public record StudentLoan [JsonPropertyName("last_payment_date")] public DateOnly? LastPaymentDate { get; init; } = default!; + /// + /// The total amount owed as of the last statement issued + /// + [JsonPropertyName("last_statement_balance")] + public decimal? LastStatementBalance { get; init; } = default!; + /// /// The date of the last statement. Dates are returned in an ISO 8601 format (YYYY-MM-DD). /// diff --git a/src/Plaid/Entity/TotalInflowAmount.cs b/src/Plaid/Entity/TotalInflowAmount.cs new file mode 100644 index 00000000..d953f827 --- /dev/null +++ b/src/Plaid/Entity/TotalInflowAmount.cs @@ -0,0 +1,27 @@ +namespace Going.Plaid.Entity; + +/// +/// Total amount of debit transactions into the account in the time period of the report. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. +/// +public record TotalInflowAmount +{ + /// + /// Value of amount with up to 2 decimal places. + /// + [JsonPropertyName("amount")] + public decimal Amount { get; init; } = default!; + + /// + /// The ISO 4217 currency code of the amount or balance. + /// + [JsonPropertyName("iso_currency_code")] + public string? IsoCurrencyCode { get; init; } = default!; + + /// + /// The unofficial currency code associated with the amount or balance. Always null if iso_currency_code is non-null. + /// Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. + /// + [JsonPropertyName("unofficial_currency_code")] + public string? UnofficialCurrencyCode { get; init; } = default!; + +} diff --git a/src/Plaid/Entity/TotalInflowAmount30d.cs b/src/Plaid/Entity/TotalInflowAmount30d.cs new file mode 100644 index 00000000..36c22f00 --- /dev/null +++ b/src/Plaid/Entity/TotalInflowAmount30d.cs @@ -0,0 +1,27 @@ +namespace Going.Plaid.Entity; + +/// +/// Total amount of debit transactions into the account in the last 30 days. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. +/// +public record TotalInflowAmount30d +{ + /// + /// Value of amount with up to 2 decimal places. + /// + [JsonPropertyName("amount")] + public decimal Amount { get; init; } = default!; + + /// + /// The ISO 4217 currency code of the amount or balance. + /// + [JsonPropertyName("iso_currency_code")] + public string? IsoCurrencyCode { get; init; } = default!; + + /// + /// The unofficial currency code associated with the amount or balance. Always null if iso_currency_code is non-null. + /// Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. + /// + [JsonPropertyName("unofficial_currency_code")] + public string? UnofficialCurrencyCode { get; init; } = default!; + +} diff --git a/src/Plaid/Entity/TotalInflowAmount60d.cs b/src/Plaid/Entity/TotalInflowAmount60d.cs new file mode 100644 index 00000000..e8d150fe --- /dev/null +++ b/src/Plaid/Entity/TotalInflowAmount60d.cs @@ -0,0 +1,27 @@ +namespace Going.Plaid.Entity; + +/// +/// Total amount of debit transactions into the account in the last 60 days. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. +/// +public record TotalInflowAmount60d +{ + /// + /// Value of amount with up to 2 decimal places. + /// + [JsonPropertyName("amount")] + public decimal Amount { get; init; } = default!; + + /// + /// The ISO 4217 currency code of the amount or balance. + /// + [JsonPropertyName("iso_currency_code")] + public string? IsoCurrencyCode { get; init; } = default!; + + /// + /// The unofficial currency code associated with the amount or balance. Always null if iso_currency_code is non-null. + /// Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. + /// + [JsonPropertyName("unofficial_currency_code")] + public string? UnofficialCurrencyCode { get; init; } = default!; + +} diff --git a/src/Plaid/Entity/TotalInflowAmount90d.cs b/src/Plaid/Entity/TotalInflowAmount90d.cs new file mode 100644 index 00000000..a3e2b920 --- /dev/null +++ b/src/Plaid/Entity/TotalInflowAmount90d.cs @@ -0,0 +1,27 @@ +namespace Going.Plaid.Entity; + +/// +/// Total amount of debit transactions into the account in the last 90 days. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. +/// +public record TotalInflowAmount90d +{ + /// + /// Value of amount with up to 2 decimal places. + /// + [JsonPropertyName("amount")] + public decimal Amount { get; init; } = default!; + + /// + /// The ISO 4217 currency code of the amount or balance. + /// + [JsonPropertyName("iso_currency_code")] + public string? IsoCurrencyCode { get; init; } = default!; + + /// + /// The unofficial currency code associated with the amount or balance. Always null if iso_currency_code is non-null. + /// Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. + /// + [JsonPropertyName("unofficial_currency_code")] + public string? UnofficialCurrencyCode { get; init; } = default!; + +} diff --git a/src/Plaid/Entity/TotalMonthlyIncomeInsights.cs b/src/Plaid/Entity/TotalMonthlyIncomeInsights.cs index 432183c6..f6e54779 100644 --- a/src/Plaid/Entity/TotalMonthlyIncomeInsights.cs +++ b/src/Plaid/Entity/TotalMonthlyIncomeInsights.cs @@ -1,7 +1,7 @@ namespace Going.Plaid.Entity; /// -/// An object representing the insights about the total monthly income +/// Details about about the total monthly income /// public record TotalMonthlyIncomeInsights { diff --git a/src/Plaid/Entity/TotalOutflowAmount.cs b/src/Plaid/Entity/TotalOutflowAmount.cs new file mode 100644 index 00000000..caa5b0b2 --- /dev/null +++ b/src/Plaid/Entity/TotalOutflowAmount.cs @@ -0,0 +1,27 @@ +namespace Going.Plaid.Entity; + +/// +/// Total amount of credit transactions into the account in the time period of the report. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. +/// +public record TotalOutflowAmount +{ + /// + /// Value of amount with up to 2 decimal places. + /// + [JsonPropertyName("amount")] + public decimal Amount { get; init; } = default!; + + /// + /// The ISO 4217 currency code of the amount or balance. + /// + [JsonPropertyName("iso_currency_code")] + public string? IsoCurrencyCode { get; init; } = default!; + + /// + /// The unofficial currency code associated with the amount or balance. Always null if iso_currency_code is non-null. + /// Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. + /// + [JsonPropertyName("unofficial_currency_code")] + public string? UnofficialCurrencyCode { get; init; } = default!; + +} diff --git a/src/Plaid/Entity/TotalOutflowAmount30d.cs b/src/Plaid/Entity/TotalOutflowAmount30d.cs new file mode 100644 index 00000000..86592727 --- /dev/null +++ b/src/Plaid/Entity/TotalOutflowAmount30d.cs @@ -0,0 +1,27 @@ +namespace Going.Plaid.Entity; + +/// +/// Total amount of credit transactions into the account in the last 30 days. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. +/// +public record TotalOutflowAmount30d +{ + /// + /// Value of amount with up to 2 decimal places. + /// + [JsonPropertyName("amount")] + public decimal Amount { get; init; } = default!; + + /// + /// The ISO 4217 currency code of the amount or balance. + /// + [JsonPropertyName("iso_currency_code")] + public string? IsoCurrencyCode { get; init; } = default!; + + /// + /// The unofficial currency code associated with the amount or balance. Always null if iso_currency_code is non-null. + /// Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. + /// + [JsonPropertyName("unofficial_currency_code")] + public string? UnofficialCurrencyCode { get; init; } = default!; + +} diff --git a/src/Plaid/Entity/TotalOutflowAmount60d.cs b/src/Plaid/Entity/TotalOutflowAmount60d.cs new file mode 100644 index 00000000..fc4625cb --- /dev/null +++ b/src/Plaid/Entity/TotalOutflowAmount60d.cs @@ -0,0 +1,27 @@ +namespace Going.Plaid.Entity; + +/// +/// Total amount of credit transactions into the account in the last 60 days. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. +/// +public record TotalOutflowAmount60d +{ + /// + /// Value of amount with up to 2 decimal places. + /// + [JsonPropertyName("amount")] + public decimal Amount { get; init; } = default!; + + /// + /// The ISO 4217 currency code of the amount or balance. + /// + [JsonPropertyName("iso_currency_code")] + public string? IsoCurrencyCode { get; init; } = default!; + + /// + /// The unofficial currency code associated with the amount or balance. Always null if iso_currency_code is non-null. + /// Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. + /// + [JsonPropertyName("unofficial_currency_code")] + public string? UnofficialCurrencyCode { get; init; } = default!; + +} diff --git a/src/Plaid/Entity/TotalOutflowAmount90d.cs b/src/Plaid/Entity/TotalOutflowAmount90d.cs new file mode 100644 index 00000000..7bc0c282 --- /dev/null +++ b/src/Plaid/Entity/TotalOutflowAmount90d.cs @@ -0,0 +1,27 @@ +namespace Going.Plaid.Entity; + +/// +/// Total amount of credit transactions into the account in the last 90 days. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. +/// +public record TotalOutflowAmount90d +{ + /// + /// Value of amount with up to 2 decimal places. + /// + [JsonPropertyName("amount")] + public decimal Amount { get; init; } = default!; + + /// + /// The ISO 4217 currency code of the amount or balance. + /// + [JsonPropertyName("iso_currency_code")] + public string? IsoCurrencyCode { get; init; } = default!; + + /// + /// The unofficial currency code associated with the amount or balance. Always null if iso_currency_code is non-null. + /// Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. + /// + [JsonPropertyName("unofficial_currency_code")] + public string? UnofficialCurrencyCode { get; init; } = default!; + +} diff --git a/src/Plaid/Entity/Transaction.cs b/src/Plaid/Entity/Transaction.cs index c79015e3..710cb77e 100644 --- a/src/Plaid/Entity/Transaction.cs +++ b/src/Plaid/Entity/Transaction.cs @@ -79,7 +79,7 @@ public record Transaction public string? MerchantName { get; init; } = default!; /// - /// The string returned by the financial institution to describe the transaction. For transactions returned by /transactions/sync or /transactions/get, this field will be omitted unless the client has set options.include_original_description to true. + /// The string returned by the financial institution to describe the transaction. For transactions returned by /transactions/sync or /transactions/get, this field will only be included if the client has set options.include_original_description to true. /// [JsonPropertyName("original_description")] public string? OriginalDescription { get; init; } = default!; diff --git a/src/Plaid/Entity/Transfer.cs b/src/Plaid/Entity/Transfer.cs index f01b8ca1..efb04ec0 100644 --- a/src/Plaid/Entity/Transfer.cs +++ b/src/Plaid/Entity/Transfer.cs @@ -18,7 +18,7 @@ public record Transfer public string AuthorizationId { get; init; } = default!; /// - /// Specifies the use case of the transfer. Required for transfers on an ACH network. + /// Specifies the use case of the transfer. Required for transfers on an ACH network. For more details, see ACH SEC codes. /// [JsonPropertyName("ach_class")] public Entity.AchClass? AchClass { get; init; } = default!; diff --git a/src/Plaid/Entity/TransferAuthorizationProposedTransfer.cs b/src/Plaid/Entity/TransferAuthorizationProposedTransfer.cs index a976f5d7..526f20e1 100644 --- a/src/Plaid/Entity/TransferAuthorizationProposedTransfer.cs +++ b/src/Plaid/Entity/TransferAuthorizationProposedTransfer.cs @@ -6,7 +6,7 @@ namespace Going.Plaid.Entity; public record TransferAuthorizationProposedTransfer { /// - /// Specifies the use case of the transfer. Required for transfers on an ACH network. + /// Specifies the use case of the transfer. Required for transfers on an ACH network. For more details, see ACH SEC codes. /// [JsonPropertyName("ach_class")] public Entity.AchClass? AchClass { get; init; } = default!; diff --git a/src/Plaid/Entity/TransferDiligenceStatus.cs b/src/Plaid/Entity/TransferDiligenceStatus.cs index d9eec19b..70085e8d 100644 --- a/src/Plaid/Entity/TransferDiligenceStatus.cs +++ b/src/Plaid/Entity/TransferDiligenceStatus.cs @@ -35,6 +35,12 @@ public enum TransferDiligenceStatus [EnumMember(Value = "denied")] Denied, + /// + /// + /// + [EnumMember(Value = "more_information_required")] + MoreInformationRequired, + /// /// Catch-all for unknown values returned by Plaid. If you encounter this, please check if there is a later version of the Going.Plaid library. /// diff --git a/src/Plaid/Entity/TransferIntentCreate.cs b/src/Plaid/Entity/TransferIntentCreate.cs index 1e8a0368..c59deb0b 100644 --- a/src/Plaid/Entity/TransferIntentCreate.cs +++ b/src/Plaid/Entity/TransferIntentCreate.cs @@ -60,7 +60,7 @@ public record TransferIntentCreate public Entity.TransferIntentCreateNetwork? Network { get; init; } = default!; /// - /// Specifies the use case of the transfer. Required for transfers on an ACH network. + /// Specifies the use case of the transfer. Required for transfers on an ACH network. For more details, see ACH SEC codes. /// [JsonPropertyName("ach_class")] public Entity.AchClass? AchClass { get; init; } = default!; diff --git a/src/Plaid/Entity/TransferIntentGet.cs b/src/Plaid/Entity/TransferIntentGet.cs index ae17a294..3897fb77 100644 --- a/src/Plaid/Entity/TransferIntentGet.cs +++ b/src/Plaid/Entity/TransferIntentGet.cs @@ -84,7 +84,7 @@ public record TransferIntentGet public Entity.TransferIntentCreateNetwork? Network { get; init; } = default!; /// - /// Specifies the use case of the transfer. Required for transfers on an ACH network. + /// Specifies the use case of the transfer. Required for transfers on an ACH network. For more details, see ACH SEC codes. /// [JsonPropertyName("ach_class")] public Entity.AchClass? AchClass { get; init; } = default!; diff --git a/src/Plaid/Entity/TransferPlatformRequirement.cs b/src/Plaid/Entity/TransferPlatformRequirement.cs new file mode 100644 index 00000000..484ccf94 --- /dev/null +++ b/src/Plaid/Entity/TransferPlatformRequirement.cs @@ -0,0 +1,20 @@ +namespace Going.Plaid.Entity; + +/// +/// A piece of information that is outstanding for the scaled platform onboarding process. +/// +public record TransferPlatformRequirement +{ + /// + /// The type of requirement. + /// + [JsonPropertyName("requirement_type")] + public string? RequirementType { get; init; } = default!; + + /// + /// UUID of the person associated with the requirement. Only present for individual-scoped requirements. + /// + [JsonPropertyName("person_id")] + public string? PersonId { get; init; } = default!; + +} diff --git a/src/Plaid/Entity/UserAccountIdentity.cs b/src/Plaid/Entity/UserAccountIdentity.cs index f161d9b5..645c7e7a 100644 --- a/src/Plaid/Entity/UserAccountIdentity.cs +++ b/src/Plaid/Entity/UserAccountIdentity.cs @@ -25,6 +25,7 @@ public record UserAccountIdentity /// /// The user's email address. + /// Note: email is currently not returned for users, and is an upcoming addition that will be live in early 2025. /// [JsonPropertyName("email")] public string? Email { get; init; } = default!; diff --git a/src/Plaid/Entity/VerificationInsights.cs b/src/Plaid/Entity/VerificationInsights.cs index d3b7e3a8..03531c44 100644 --- a/src/Plaid/Entity/VerificationInsights.cs +++ b/src/Plaid/Entity/VerificationInsights.cs @@ -1,7 +1,7 @@ namespace Going.Plaid.Entity; /// -/// Insights from performing database verification for the account. +/// Insights from performing database verification for the account. Only returned for Auth Items created via Database Insights. /// public record VerificationInsights { diff --git a/src/Plaid/Entity/VerifySMSDetails.cs b/src/Plaid/Entity/VerifySMSDetails.cs new file mode 100644 index 00000000..2a0b8e6d --- /dev/null +++ b/src/Plaid/Entity/VerifySMSDetails.cs @@ -0,0 +1,20 @@ +namespace Going.Plaid.Entity; + +/// +/// Additional information for the verify_sms step. +/// +public record VerifySMSDetails +{ + /// + /// The outcome status for the associated Identity Verification attempt's verify_sms step. This field will always have the same value as steps.verify_sms. + /// + [JsonPropertyName("status")] + public Entity.VerifySMSDetailsStatus Status { get; init; } = default!; + + /// + /// An array where each entry represents a verification attempt for the verify_sms step. Each entry represents one user-submitted phone number. Phone number edits, and in some cases error handling due to edge cases like rate limiting, may generate additional verifications. + /// + [JsonPropertyName("verifications")] + public IReadOnlyList Verifications { get; init; } = default!; + +} diff --git a/src/Plaid/Entity/VerifySMSDetailsStatus.cs b/src/Plaid/Entity/VerifySMSDetailsStatus.cs new file mode 100644 index 00000000..9ba84d5c --- /dev/null +++ b/src/Plaid/Entity/VerifySMSDetailsStatus.cs @@ -0,0 +1,26 @@ +namespace Going.Plaid.Entity; + +/// +/// The outcome status for the associated Identity Verification attempt's verify_sms step. This field will always have the same value as steps.verify_sms. +/// +public enum VerifySMSDetailsStatus +{ + /// + /// + /// + [EnumMember(Value = "success")] + Success, + + /// + /// + /// + [EnumMember(Value = "failed")] + Failed, + + /// + /// Catch-all for unknown values returned by Plaid. If you encounter this, please check if there is a later version of the Going.Plaid library. + /// + [EnumMember(Value = "undefined")] + Undefined, + +} diff --git a/src/Plaid/Entity/Warning.cs b/src/Plaid/Entity/Warning.cs index 3f5005cd..3e79cd24 100644 --- a/src/Plaid/Entity/Warning.cs +++ b/src/Plaid/Entity/Warning.cs @@ -21,6 +21,6 @@ public record Warning /// An error object and associated item_id used to identify a specific Item and error when a batch operation operating on multiple Items has encountered an error in one of the Items. /// [JsonPropertyName("cause")] - public Entity.Cause Cause { get; init; } = default!; + public Entity.Cause? Cause { get; init; } = default!; } diff --git a/src/Plaid/Entity/WebhookCode.cs b/src/Plaid/Entity/WebhookCode.cs index 27e353a3..22d3e8b7 100644 --- a/src/Plaid/Entity/WebhookCode.cs +++ b/src/Plaid/Entity/WebhookCode.cs @@ -251,6 +251,12 @@ public enum WebhookCode [EnumMember(Value = "STATEMENTS_REFRESH_COMPLETE")] StatementsRefreshComplete, + /// + /// + /// + [EnumMember(Value = "INSIGHTS_UPDATED")] + InsightsUpdated, + /// /// /// @@ -329,12 +335,6 @@ public enum WebhookCode [EnumMember(Value = "INSTITUTION_STATUS_ALERT_TRIGGERED")] InstitutionStatusAlertTriggered, - /// - /// - /// - [EnumMember(Value = "INSIGHTS_UPDATED")] - InsightsUpdated, - /// /// Catch-all for unknown values returned by Plaid. If you encounter this, please check if there is a later version of the Going.Plaid library. /// diff --git a/src/Plaid/Entity/WebhookType.cs b/src/Plaid/Entity/WebhookType.cs index 14ecd20a..1395ba40 100644 --- a/src/Plaid/Entity/WebhookType.cs +++ b/src/Plaid/Entity/WebhookType.cs @@ -131,6 +131,12 @@ public enum WebhookType [EnumMember(Value = "STATEMENTS")] Statements, + /// + /// + /// + [EnumMember(Value = "CRA_MONITORING")] + CraMonitoring, + /// /// /// @@ -167,12 +173,6 @@ public enum WebhookType [EnumMember(Value = "DASHBOARD_CONFIGURED_ALERT")] DashboardConfiguredAlert, - /// - /// - /// - [EnumMember(Value = "CRA_MONITORING")] - CraMonitoring, - /// /// /// diff --git a/src/Plaid/IdentityVerification/IdentityVerificationCreateResponse.cs b/src/Plaid/IdentityVerification/IdentityVerificationCreateResponse.cs index c1a59235..d86044b8 100644 --- a/src/Plaid/IdentityVerification/IdentityVerificationCreateResponse.cs +++ b/src/Plaid/IdentityVerification/IdentityVerificationCreateResponse.cs @@ -100,12 +100,24 @@ public record IdentityVerificationCreateResponse : ResponseBase [JsonPropertyName("risk_check")] public Entity.RiskCheckDetails? RiskCheck { get; init; } = default!; + /// + /// Additional information for the verify_sms step. + /// + [JsonPropertyName("verify_sms")] + public Entity.VerifySMSDetails? VerifySms { get; init; } = default!; + /// /// ID of the associated screening. /// [JsonPropertyName("watchlist_screening_id")] public string? WatchlistScreeningId { get; init; } = default!; + /// + /// ID of the associated Beacon User. + /// + [JsonPropertyName("beacon_user_id")] + public string? BeaconUserId { get; init; } = default!; + /// /// An ISO8601 formatted timestamp. /// diff --git a/src/Plaid/IdentityVerification/IdentityVerificationGetResponse.cs b/src/Plaid/IdentityVerification/IdentityVerificationGetResponse.cs index 027206a8..eee52730 100644 --- a/src/Plaid/IdentityVerification/IdentityVerificationGetResponse.cs +++ b/src/Plaid/IdentityVerification/IdentityVerificationGetResponse.cs @@ -100,12 +100,24 @@ public record IdentityVerificationGetResponse : ResponseBase [JsonPropertyName("risk_check")] public Entity.RiskCheckDetails? RiskCheck { get; init; } = default!; + /// + /// Additional information for the verify_sms step. + /// + [JsonPropertyName("verify_sms")] + public Entity.VerifySMSDetails? VerifySms { get; init; } = default!; + /// /// ID of the associated screening. /// [JsonPropertyName("watchlist_screening_id")] public string? WatchlistScreeningId { get; init; } = default!; + /// + /// ID of the associated Beacon User. + /// + [JsonPropertyName("beacon_user_id")] + public string? BeaconUserId { get; init; } = default!; + /// /// An ISO8601 formatted timestamp. /// diff --git a/src/Plaid/IdentityVerification/IdentityVerificationRetryResponse.cs b/src/Plaid/IdentityVerification/IdentityVerificationRetryResponse.cs index 7706eec6..20abbfcb 100644 --- a/src/Plaid/IdentityVerification/IdentityVerificationRetryResponse.cs +++ b/src/Plaid/IdentityVerification/IdentityVerificationRetryResponse.cs @@ -100,12 +100,24 @@ public record IdentityVerificationRetryResponse : ResponseBase [JsonPropertyName("risk_check")] public Entity.RiskCheckDetails? RiskCheck { get; init; } = default!; + /// + /// Additional information for the verify_sms step. + /// + [JsonPropertyName("verify_sms")] + public Entity.VerifySMSDetails? VerifySms { get; init; } = default!; + /// /// ID of the associated screening. /// [JsonPropertyName("watchlist_screening_id")] public string? WatchlistScreeningId { get; init; } = default!; + /// + /// ID of the associated Beacon User. + /// + [JsonPropertyName("beacon_user_id")] + public string? BeaconUserId { get; init; } = default!; + /// /// An ISO8601 formatted timestamp. /// diff --git a/src/Plaid/Item/ItemGetResponse.cs b/src/Plaid/Item/ItemGetResponse.cs index 12905fa7..eb20203e 100644 --- a/src/Plaid/Item/ItemGetResponse.cs +++ b/src/Plaid/Item/ItemGetResponse.cs @@ -6,10 +6,10 @@ namespace Going.Plaid.Item; public record ItemGetResponse : ResponseBase { /// - /// Metadata about the Item. + /// Metadata about the Item /// [JsonPropertyName("item")] - public Entity.Item Item { get; init; } = default!; + public Entity.ItemWithConsentFields Item { get; init; } = default!; /// /// Information about the last successful and failed transactions update for the Item. diff --git a/src/Plaid/Link/LinkTokenCreateRequest.cs b/src/Plaid/Link/LinkTokenCreateRequest.cs index c009e008..3f3f084f 100644 --- a/src/Plaid/Link/LinkTokenCreateRequest.cs +++ b/src/Plaid/Link/LinkTokenCreateRequest.cs @@ -38,7 +38,7 @@ public partial class LinkTokenCreateRequest : RequestBase /// List of Plaid product(s) you wish to use. If launching Link in update mode, should be omitted (unless you are using update mode to add Income or Assets to an Item); required otherwise. /// balance is *not* a valid value, the Balance product does not require explicit initialization and will automatically be initialized when any other product is initialized. /// The products specified here will determine which institutions will be available to your users in Link. Only institutions that support *all* requested products can be selected; a if a user attempts to select an institution that does not support a listed product, a "Connectivity not supported" error message will appear in Link. To maximize the number of institutions available, initialize Link with the minimal product set required for your use case. - /// Additional products can be included via the optional_products or required_if_supported_products fields. Products can also be be initialized by calling the endpoint after obtaining an access token; this may require the product to be listed in the additional_consented_products array. For details, see Choosing when to initialize products. + /// Additional products can be included via the optional_products or required_if_supported_products fields. Products can also be initialized by calling the endpoint after obtaining an access token; this may require the product to be listed in the additional_consented_products array. For details, see Choosing when to initialize products. /// Note that, unless you have opted to disable Instant Match support, institutions that support Instant Match will also be shown in Link if auth is specified as a product, even though these institutions do not contain auth in their product array. /// In Production, you will be billed for each product that you specify when initializing Link. Note that a product cannot be removed from an Item once the Item has been initialized with that product. To stop billing on an Item for subscription-based products, such as Liabilities, Investments, and Transactions, remove the Item via /item/remove. /// @@ -66,12 +66,13 @@ public partial class LinkTokenCreateRequest : RequestBase /// balance is *not* a valid value, the Balance product does not require explicit initialization and will automatically have consent collected. /// Institutions that do not support these products will still be shown in Link. /// There should be no overlap between this array and the products or required_if_supported_products arrays. + /// If you include signal in additional_consented_products, you will need to call /signal/prepare before calling /signal/evaluate for the first time on an Item in order to get the most accurate results. For more details, see Using /signal/prepare. /// [JsonPropertyName("additional_consented_products")] public IReadOnlyList? AdditionalConsentedProducts { get; set; } = default!; /// - /// The destination URL to which any webhooks should be sent. Note that webhooks for Payment Initiation (e-wallet transactions only), Transfer, Bank Transfer (including Auth micro-deposit notification webhooks) and Identity Verification are configured via the Dashboard instead. + /// The destination URL to which any webhooks should be sent. Note that webhooks for Payment Initiation (e-wallet transactions only), Transfer, Bank Transfer (including Auth micro-deposit notification webhooks), Monitor, Identity Verification, and Link Events are configured via the Dashboard instead. In update mode, this field will not have an effect; to update the webhook receiver endpoint for an existing Item, use /item/webhook/update instead. /// [JsonPropertyName("webhook")] public string? Webhook { get; set; } = default!; @@ -234,7 +235,7 @@ public partial class LinkTokenCreateRequest : RequestBase public Entity.LinkTokenInvestmentsAuth? InvestmentsAuth { get; set; } = default!; /// - /// Configuration parameters for Hosted Link. To request access to Hosted Link, contact your account manager. + /// Configuration parameters for Hosted Link. To enable the session for Hosted Link, send this object in the request. It can be empty. /// [JsonPropertyName("hosted_link")] public Entity.LinkTokenCreateHostedLink? HostedLink { get; set; } = default!; diff --git a/src/Plaid/Link/LinkTokenCreateResponse.cs b/src/Plaid/Link/LinkTokenCreateResponse.cs index 789baf86..7f80791d 100644 --- a/src/Plaid/Link/LinkTokenCreateResponse.cs +++ b/src/Plaid/Link/LinkTokenCreateResponse.cs @@ -12,13 +12,13 @@ public record LinkTokenCreateResponse : ResponseBase public string LinkToken { get; init; } = default!; /// - /// The expiration date for the link_token, in ISO 8601 format. A link_token created to generate a public_token that will be exchanged for a new access_token expires after 4 hours. A link_token created for an existing Item (such as when updating an existing access_token by launching Link in update mode) expires after 30 minutes. + /// The expiration date for the link_token, in ISO 8601 format. By default, a link_token created to generate a public_token that will be exchanged for a new access_token expires after 4 hours, and a link_token created for an existing Item (such as when updating an existing access_token by launching Link in update mode) expires after 30 minutes. If using Hosted Link, the link_token will expire at the same time as the Hosted Link URL, and you can customize the duration using the hosted_link.url_lifetime_seconds option in the request. If using Link Delivery (beta), the link_token will expire by default after 24 hours if sent via SMS and after 7 days if sent via email. /// [JsonPropertyName("expiration")] public DateTimeOffset Expiration { get; init; } = default!; /// - /// A URL of a Plaid-hosted Link flow that will use the Link token returned by this request. Only present if the client is enabled for Hosted Link. + /// A URL of a Plaid-hosted Link flow that will use the Link token returned by this request. Only present if the session is enabled for Hosted Link. To enable the session for Hosted Link, send a hosted_link object in the request. /// [JsonPropertyName("hosted_link_url")] public string? HostedLinkUrl { get; init; } = default!; diff --git a/src/Plaid/Partner/PlaidClient.cs b/src/Plaid/Partner/PlaidClient.cs index 43004844..4e419217 100644 --- a/src/Plaid/Partner/PlaidClient.cs +++ b/src/Plaid/Partner/PlaidClient.cs @@ -3,7 +3,7 @@ namespace Going.Plaid; public sealed partial class PlaidClient { /// - /// The /partner/customer/create endpoint is used by reseller partners to create end customers. + /// The /partner/customer/create endpoint is used by reseller partners to create end customers. To create end customers, it should be called in the Production environment only, even when creating Sandbox API keys. If called in the Sandbox environment, it will return a sample response, but no customer will be created and the API keys will not be valid. /// /// public Task PartnerCustomerCreateAsync(Partner.PartnerCustomerCreateRequest request) => diff --git a/src/Plaid/PaymentInitiation/PaymentInitiationConsentCreateRequest.cs b/src/Plaid/PaymentInitiation/PaymentInitiationConsentCreateRequest.cs index c5d60558..8348772c 100644 --- a/src/Plaid/PaymentInitiation/PaymentInitiationConsentCreateRequest.cs +++ b/src/Plaid/PaymentInitiation/PaymentInitiationConsentCreateRequest.cs @@ -21,7 +21,13 @@ public partial class PaymentInitiationConsentCreateRequest : RequestBase /// An array of payment consent scopes. /// [JsonPropertyName("scopes")] - public IReadOnlyList Scopes { get; set; } = default!; + public IReadOnlyList? Scopes { get; set; } = default!; + + /// + /// Payment consent type. Defines possible use case for payments made with the given consent. + /// + [JsonPropertyName("type")] + public Entity.PaymentInitiationConsentType? Type { get; set; } = default!; /// /// Limitations that will be applied to payments initiated using the payment consent. @@ -30,9 +36,16 @@ public partial class PaymentInitiationConsentCreateRequest : RequestBase public Entity.PaymentInitiationConsentConstraints Constraints { get; set; } = default!; /// - /// Additional payment consent options + /// (Deprecated) Additional payment consent options /// [JsonPropertyName("options")] public Entity.ExternalPaymentInitiationConsentOptions? Options { get; set; } = default!; + /// + /// An object representing the payment consent payer details. + /// Payer name and account numbers are required to lock the account to which the consent can be created. + /// + [JsonPropertyName("payer_details")] + public Entity.PaymentInitiationConsentPayerDetails? PayerDetails { get; set; } = default!; + } diff --git a/src/Plaid/PaymentInitiation/PaymentInitiationConsentGetResponse.cs b/src/Plaid/PaymentInitiation/PaymentInitiationConsentGetResponse.cs index 5dcfee5c..b6d92839 100644 --- a/src/Plaid/PaymentInitiation/PaymentInitiationConsentGetResponse.cs +++ b/src/Plaid/PaymentInitiation/PaymentInitiationConsentGetResponse.cs @@ -42,9 +42,15 @@ public record PaymentInitiationConsentGetResponse : ResponseBase public Entity.PaymentInitiationConsentConstraints? Constraints { get; init; } = default!; /// - /// An array of payment consent scopes. + /// Deprecated, use the 'type' field instead. /// [JsonPropertyName("scopes")] public IReadOnlyList? Scopes { get; init; } = default!; + /// + /// Payment consent type. Defines possible use case for payments made with the given consent. + /// + [JsonPropertyName("type")] + public Entity.PaymentInitiationConsentType? Type { get; init; } = default!; + } diff --git a/src/Plaid/Processor/PlaidClient.cs b/src/Plaid/Processor/PlaidClient.cs index 5cd5701f..0b213aa6 100644 --- a/src/Plaid/Processor/PlaidClient.cs +++ b/src/Plaid/Processor/PlaidClient.cs @@ -153,7 +153,7 @@ public sealed partial class PlaidClient .ParseResponseAsync(); /// - /// Used to create a token suitable for sending to one of Plaid's partners to enable integrations. Note that Stripe partnerships use bank account tokens instead; see /processor/stripe/bank_account_token/create for creating tokens for use with Stripe integrations. Once created, a processor token for a given Item cannot be modified or updated. If the account must be linked to a new or different partner resource, create a new Item by having the user go through the Link flow again; a new processor token can then be created from the new access_token. Processor tokens can also be revoked, using /item/remove. + /// Used to create a token suitable for sending to one of Plaid's partners to enable integrations. Note that Stripe partnerships use bank account tokens instead; see /processor/stripe/bank_account_token/create for creating tokens for use with Stripe integrations. If using multiple processors, multiple different processor tokens can be created for a single access token. Once created, a processor token for a given Item cannot be modified or updated. To revoke the processor's access, the entire Item must be deleted by calling /item/remove. /// /// public Task ProcessorTokenCreateAsync(Processor.ProcessorTokenCreateRequest request) => @@ -187,7 +187,7 @@ public sealed partial class PlaidClient /// /// Used to create a token suitable for sending to Stripe to enable Plaid-Stripe integrations. For a detailed guide on integrating Stripe, see Add Stripe to your app. /// Note that the Stripe bank account token is a one-time use token. To store bank account information for later use, you can use a Stripe customer object and create an associated bank account from the token, or you can use a Stripe Custom account and create an associated external bank account from the token. This bank account information should work indefinitely, unless the user's bank account information changes or they revoke Plaid's permissions to access their account. Stripe bank account information cannot be modified once the bank account token has been created. If you ever need to change the bank account details used by Stripe for a specific customer, have the user go through Link again and create a new bank account token from the new access_token. - /// Bank account tokens can also be revoked, using /item/remove. + /// To revoke a bank account token, the entire underlying access token must be revoked using /item/remove. /// /// public Task ProcessorStripeBankAccountTokenCreateAsync(Processor.ProcessorStripeBankAccountTokenCreateRequest request) => diff --git a/src/Plaid/Processor/ProcessorBankTransferCreateRequest.cs b/src/Plaid/Processor/ProcessorBankTransferCreateRequest.cs index 7d09eb26..a560a446 100644 --- a/src/Plaid/Processor/ProcessorBankTransferCreateRequest.cs +++ b/src/Plaid/Processor/ProcessorBankTransferCreateRequest.cs @@ -49,7 +49,7 @@ public partial class ProcessorBankTransferCreateRequest : RequestBase public string Description { get; set; } = default!; /// - /// Specifies the use case of the transfer. Required for transfers on an ACH network. + /// Specifies the use case of the transfer. Required for transfers on an ACH network. For more details, see ACH SEC codes. /// [JsonPropertyName("ach_class")] public Entity.AchClass? AchClass { get; set; } = default!; diff --git a/src/Plaid/Processor/ProcessorSignalEvaluateResponse.cs b/src/Plaid/Processor/ProcessorSignalEvaluateResponse.cs index 90b13aaf..db7d5d67 100644 --- a/src/Plaid/Processor/ProcessorSignalEvaluateResponse.cs +++ b/src/Plaid/Processor/ProcessorSignalEvaluateResponse.cs @@ -9,7 +9,7 @@ public record ProcessorSignalEvaluateResponse : ResponseBase /// Risk scoring details broken down by risk category. /// [JsonPropertyName("scores")] - public Entity.SignalEvaluateScores Scores { get; init; } = default!; + public Entity.SignalEvaluateScores? Scores { get; init; } = default!; /// /// The core attributes object contains additional data that can be used to assess the ACH return risk. Examples of data include: diff --git a/src/Plaid/Sandbox/SandboxTransferLedgerSimulateAvailableRequest.cs b/src/Plaid/Sandbox/SandboxTransferLedgerSimulateAvailableRequest.cs index fa278c29..bca7a868 100644 --- a/src/Plaid/Sandbox/SandboxTransferLedgerSimulateAvailableRequest.cs +++ b/src/Plaid/Sandbox/SandboxTransferLedgerSimulateAvailableRequest.cs @@ -17,4 +17,10 @@ public partial class SandboxTransferLedgerSimulateAvailableRequest : RequestBase [JsonPropertyName("test_clock_id")] public string? TestClockId { get; set; } = default!; + /// + /// The webhook URL to which a TRANSFER_EVENTS_UPDATE webhook should be sent. + /// + [JsonPropertyName("webhook")] + public string? Webhook { get; set; } = default!; + } diff --git a/src/Plaid/Sandbox/SandboxTransferRefundSimulateRequest.cs b/src/Plaid/Sandbox/SandboxTransferRefundSimulateRequest.cs index d87cfb01..e5878307 100644 --- a/src/Plaid/Sandbox/SandboxTransferRefundSimulateRequest.cs +++ b/src/Plaid/Sandbox/SandboxTransferRefundSimulateRequest.cs @@ -35,4 +35,10 @@ public partial class SandboxTransferRefundSimulateRequest : RequestBase [JsonPropertyName("failure_reason")] public Entity.TransferFailure? FailureReason { get; set; } = default!; + /// + /// The webhook URL to which a TRANSFER_EVENTS_UPDATE webhook should be sent. + /// + [JsonPropertyName("webhook")] + public string? Webhook { get; set; } = default!; + } diff --git a/src/Plaid/Sandbox/SandboxTransferSimulateRequest.cs b/src/Plaid/Sandbox/SandboxTransferSimulateRequest.cs index f6d78196..4c6dd9ae 100644 --- a/src/Plaid/Sandbox/SandboxTransferSimulateRequest.cs +++ b/src/Plaid/Sandbox/SandboxTransferSimulateRequest.cs @@ -18,12 +18,13 @@ public partial class SandboxTransferSimulateRequest : RequestBase public string? TestClockId { get; set; } = default!; /// - /// The asynchronous event to be simulated. May be: posted, settled, failed, or returned. + /// The asynchronous event to be simulated. May be: posted, settled, failed, funds_available, or returned. /// An error will be returned if the event type is incompatible with the current transfer status. Compatible status --> event type transitions include: /// pending --> failed /// pending --> posted /// posted --> returned /// posted --> settled + /// settled --> funds_available (only applicable to ACH debits.) /// [JsonPropertyName("event_type")] public string EventType { get; set; } = default!; @@ -34,4 +35,10 @@ public partial class SandboxTransferSimulateRequest : RequestBase [JsonPropertyName("failure_reason")] public Entity.TransferFailure? FailureReason { get; set; } = default!; + /// + /// The webhook URL to which a TRANSFER_EVENTS_UPDATE webhook should be sent. + /// + [JsonPropertyName("webhook")] + public string? Webhook { get; set; } = default!; + } diff --git a/src/Plaid/Sandbox/SandboxTransferSweepSimulateRequest.cs b/src/Plaid/Sandbox/SandboxTransferSweepSimulateRequest.cs index 160c54f3..37200b3b 100644 --- a/src/Plaid/Sandbox/SandboxTransferSweepSimulateRequest.cs +++ b/src/Plaid/Sandbox/SandboxTransferSweepSimulateRequest.cs @@ -11,4 +11,10 @@ public partial class SandboxTransferSweepSimulateRequest : RequestBase [JsonPropertyName("test_clock_id")] public string? TestClockId { get; set; } = default!; + /// + /// The webhook URL to which a TRANSFER_EVENTS_UPDATE webhook should be sent. + /// + [JsonPropertyName("webhook")] + public string? Webhook { get; set; } = default!; + } diff --git a/src/Plaid/Signal/PlaidClient.cs b/src/Plaid/Signal/PlaidClient.cs index 3645ea28..f82a04d9 100644 --- a/src/Plaid/Signal/PlaidClient.cs +++ b/src/Plaid/Signal/PlaidClient.cs @@ -13,7 +13,7 @@ public sealed partial class PlaidClient .ParseResponseAsync(); /// - /// After calling /signal/evaluate (or /accounts/balance/get, for participants in the Balance Plus beta), call /signal/decision/report to report whether the transaction was initiated. + /// After calling /signal/evaluate, call /signal/decision/report to report whether the transaction was initiated. /// /// public Task SignalDecisionReportAsync(Signal.SignalDecisionReportRequest request) => @@ -21,7 +21,7 @@ public sealed partial class PlaidClient .ParseResponseAsync(); /// - /// Call the /signal/return/report endpoint to report a returned transaction that was previously sent to the /signal/evaluate or (for participants in the Balance Plus beta) the /accounts/balance/get endpoint. Your feedback will be used by the model to incorporate the latest risk trend in your portfolio. + /// Call the /signal/return/report endpoint to report a returned transaction that was previously sent to the /signal/evaluate endpoint. Your feedback will be used by the model to incorporate the latest risk trend in your portfolio. /// /// public Task SignalReturnReportAsync(Signal.SignalReturnReportRequest request) => @@ -29,7 +29,7 @@ public sealed partial class PlaidClient .ParseResponseAsync(); /// - /// When Link is not initialized with Signal, call /signal/prepare to opt-in that Item to the Signal data collection process, developing a Signal score. + /// When an Item is not initialized with Signal, call /signal/prepare to opt-in that Item to the Signal data collection process, developing a Signal score. This should be done on Items where Signal was added in the additional_consented_products array but not in the products, optional_products, or required_if_supported_products array. If /signal/prepare is skipped on an Item that is not initialized with Signal, the initial call to /signal/evaluate on that Item will be less accurate, because Signal will have access to less data for computing the Signal score. /// If run on an Item that is already initialized with Signal, this endpoint will return a 200 response and will not modify the Item. /// /// diff --git a/src/Plaid/Signal/SignalEvaluateResponse.cs b/src/Plaid/Signal/SignalEvaluateResponse.cs index de8330f5..0763a95e 100644 --- a/src/Plaid/Signal/SignalEvaluateResponse.cs +++ b/src/Plaid/Signal/SignalEvaluateResponse.cs @@ -9,7 +9,7 @@ public record SignalEvaluateResponse : ResponseBase /// Risk scoring details broken down by risk category. /// [JsonPropertyName("scores")] - public Entity.SignalEvaluateScores Scores { get; init; } = default!; + public Entity.SignalEvaluateScores? Scores { get; init; } = default!; /// /// The core attributes object contains additional data that can be used to assess the ACH return risk. Examples of data include: diff --git a/src/Plaid/Transfer/TransferAuthorizationCreateRequest.cs b/src/Plaid/Transfer/TransferAuthorizationCreateRequest.cs index 5f3e41c4..25b09277 100644 --- a/src/Plaid/Transfer/TransferAuthorizationCreateRequest.cs +++ b/src/Plaid/Transfer/TransferAuthorizationCreateRequest.cs @@ -48,7 +48,7 @@ public partial class TransferAuthorizationCreateRequest : RequestBase public string Amount { get; set; } = default!; /// - /// Specifies the use case of the transfer. Required for transfers on an ACH network. + /// Specifies the use case of the transfer. Required for transfers on an ACH network. For more details, see ACH SEC codes. /// [JsonPropertyName("ach_class")] public Entity.AchClass? AchClass { get; set; } = default!; diff --git a/src/Plaid/Transfer/TransferIntentCreateRequest.cs b/src/Plaid/Transfer/TransferIntentCreateRequest.cs index d9ca9a3d..231bcb56 100644 --- a/src/Plaid/Transfer/TransferIntentCreateRequest.cs +++ b/src/Plaid/Transfer/TransferIntentCreateRequest.cs @@ -42,7 +42,7 @@ public partial class TransferIntentCreateRequest : RequestBase public string Description { get; set; } = default!; /// - /// Specifies the use case of the transfer. Required for transfers on an ACH network. + /// Specifies the use case of the transfer. Required for transfers on an ACH network. For more details, see ACH SEC codes. /// [JsonPropertyName("ach_class")] public Entity.AchClass? AchClass { get; set; } = default!; diff --git a/src/Plaid/Transfer/TransferRecurringCreateRequest.cs b/src/Plaid/Transfer/TransferRecurringCreateRequest.cs index e1ab235b..1627cab2 100644 --- a/src/Plaid/Transfer/TransferRecurringCreateRequest.cs +++ b/src/Plaid/Transfer/TransferRecurringCreateRequest.cs @@ -37,7 +37,7 @@ public partial class TransferRecurringCreateRequest : RequestBase public Entity.TransferRecurrinngNetwork Network { get; set; } = default!; /// - /// Specifies the use case of the transfer. Required for transfers on an ACH network. + /// Specifies the use case of the transfer. Required for transfers on an ACH network. For more details, see ACH SEC codes. /// [JsonPropertyName("ach_class")] public Entity.AchClass? AchClass { get; set; } = default!; diff --git a/src/Plaid/Webhook/LinkEventsWebhook.cs b/src/Plaid/Webhook/LinkEventsWebhook.cs index 6d47b478..bda137af 100644 --- a/src/Plaid/Webhook/LinkEventsWebhook.cs +++ b/src/Plaid/Webhook/LinkEventsWebhook.cs @@ -2,7 +2,7 @@ namespace Going.Plaid.Webhook; /// /// This webhook contains a summary of the events from a Link session and will be fired after the user finishes going through Link. If the user abandons the Link flow (i.e., closes the hosted link webpage or leaves Link open for too long without taking any action), the webhook will be fired 5-15 minutes after the last user interaction. A single Link session may occasionally generate multiple EVENTS webhooks. If this occurs, the new webhook will contain all previous events for the session, as well as new events that occurred since the previous EVENTS webhook was sent. If this occurs, events can be grouped using the link_session_id field and, if necessary, de-duplicated using the event_id field. -/// By default, the EVENTS webhook is enabled only for clients that are enabled for Hosted Link. If you would like to receive this webhook and are not using Hosted Link, contact your Account Manager. +/// By default, the EVENTS webhook is sent only for sessions where the end user goes through a Hosted Link flow (including Link Recovery flows). If you would like to receive this webhook for sessions not using Hosted Link, contact your Account Manager or Support. /// public record LinkEventsWebhook : WebhookBase { diff --git a/src/Plaid/Webhook/LinkSessionFinishedWebhook.cs b/src/Plaid/Webhook/LinkSessionFinishedWebhook.cs index aa198f9a..d19939cd 100644 --- a/src/Plaid/Webhook/LinkSessionFinishedWebhook.cs +++ b/src/Plaid/Webhook/LinkSessionFinishedWebhook.cs @@ -2,7 +2,7 @@ namespace Going.Plaid.Webhook; /// /// Contains the state of a completed Link session, along with the public token(s) if available. -/// By default, the SESSION_FINISHED webhook is enabled only for clients that are enabled for Hosted Link, or in sessions that are enabled for Multi-Item Link. If you would like to receive this webhook and are not using Hosted Link or Multi-Item Link, contact your Account Manager. +/// By default, the EVENTS webhook is sent only for sessions where the end user goes through a Hosted Link flow (including Link Recovery flows) or a Multi-Item Link flow. If you would like to receive this webhook for other sessions, contact your Account Manager or Support. /// public record LinkSessionFinishedWebhook : WebhookBase { diff --git a/src/Plaid/Webhook/MonitoringInsightsWebhook.cs b/src/Plaid/Webhook/MonitoringInsightsWebhook.cs index 107333ce..573e3521 100644 --- a/src/Plaid/Webhook/MonitoringInsightsWebhook.cs +++ b/src/Plaid/Webhook/MonitoringInsightsWebhook.cs @@ -1,7 +1,7 @@ namespace Going.Plaid.Webhook; /// -/// Every 14 days, the webhook will be fired per item enabled for Monitoring Insights. +/// For each user enabled for Cash Flow Updates, this webhook will fire every 14 days with information on the status of the update. Upon receiving the webhook, call /cra/monitoring_insights/get to retrieve the updated insights. /// public record MonitoringInsightsWebhook : WebhookBase { diff --git a/src/Plaid/Webhook/PendingDisconnectWebhook.cs b/src/Plaid/Webhook/PendingDisconnectWebhook.cs index 2d630998..15332ba5 100644 --- a/src/Plaid/Webhook/PendingDisconnectWebhook.cs +++ b/src/Plaid/Webhook/PendingDisconnectWebhook.cs @@ -1,7 +1,7 @@ namespace Going.Plaid.Webhook; /// -/// Fired when an Item is expected to be disconnected. This can be resolved by having the user go through Link’s update mode. +/// Fired when an Item is expected to be disconnected. The webhook will currently be fired 7 days before the existing Item is scheduled for disconnection. This can be resolved by having the user go through Link’s update mode. Currently, this webhook is fired only for US or Canadian institutions; in the UK or EU, you should continue to listed for the PENDING_EXPIRATION webhook instead. /// public record PendingDisconnectWebhook : WebhookBase { diff --git a/src/Plaid/Webhook/PendingExpirationWebhook.cs b/src/Plaid/Webhook/PendingExpirationWebhook.cs index 064c6f42..4c8554cb 100644 --- a/src/Plaid/Webhook/PendingExpirationWebhook.cs +++ b/src/Plaid/Webhook/PendingExpirationWebhook.cs @@ -1,7 +1,7 @@ namespace Going.Plaid.Webhook; /// -/// Fired when an Item’s access consent is expiring in 7 days. Some Items have explicit expiration times and we try to relay this when possible to reduce service disruption. This can be resolved by having the user go through Link’s update mode. +/// Fired when an Item’s access consent is expiring in 7 days. This can be resolved by having the user go through Link’s update mode. This webhook is fired only for Items associated with institutions in Europe (including the UK); for Items associated with institutions in the US or Canada, see PENDING_DISCONNECT instead. /// public record PendingExpirationWebhook : WebhookBase { diff --git a/src/Plaid/Webhook/TransferEventsUpdateWebhook.cs b/src/Plaid/Webhook/TransferEventsUpdateWebhook.cs index dc633dfc..b543409f 100644 --- a/src/Plaid/Webhook/TransferEventsUpdateWebhook.cs +++ b/src/Plaid/Webhook/TransferEventsUpdateWebhook.cs @@ -1,7 +1,7 @@ namespace Going.Plaid.Webhook; /// -/// Fired when new transfer events are available. Receiving this webhook indicates you should fetch the new events from /transfer/event/sync. +/// Fired when new transfer events are available. Receiving this webhook indicates you should fetch the new events from /transfer/event/sync. If multiple transfer events occur within a single minute, only one webhook will be fired, so a single webhook instance may correspond to multiple transfer events. /// public record TransferEventsUpdateWebhook : WebhookBase { diff --git a/src/Plaid/Webhook/UserPermissionRevokedWebhook.cs b/src/Plaid/Webhook/UserPermissionRevokedWebhook.cs index c687bea4..5e756ffd 100644 --- a/src/Plaid/Webhook/UserPermissionRevokedWebhook.cs +++ b/src/Plaid/Webhook/UserPermissionRevokedWebhook.cs @@ -1,7 +1,7 @@ namespace Going.Plaid.Webhook; /// -/// The USER_PERMISSION_REVOKED webhook may be fired when an end user has revoked the permission that they previously granted to access an Item. If the end user revoked their permissions through Plaid (such as via the Plaid Portal or by contacting Plaid Support), the webhook will fire. If the end user revoked their permissions directly through the institution, this webhook may not always fire, since some institutions’ consent portals do not trigger this webhook. Once access to an Item has been revoked, it cannot be restored. If the user subsequently returns to your application, a new Item must be created for the user. Upon receiving this webhook, it is recommended to call /item/remove to delete the underlying Item and to delete any stored data from Plaid associated with the Item. +/// The USER_PERMISSION_REVOKED webhook may be fired when an end user has revoked the permission that they previously granted to access an Item. If the end user revoked their permissions through Plaid (such as via the Plaid Portal or by contacting Plaid Support), the webhook will fire. If the end user revoked their permissions directly through the institution, this webhook may not always fire, since some institutions’ consent portals do not trigger this webhook. Upon receiving this webhook, it is recommended to delete any stored data from Plaid associated with the Item. To restore the Item, it can be sent through update mode. /// Note that when working with tokenized account numbers with Auth or Transfer, the account number provided by Plaid will no longer work for creating transfers once user permission has been revoked. /// public record UserPermissionRevokedWebhook : WebhookBase