diff --git a/Vonage.Test/VerifyV2/NextWorkflow/E2ETest.cs b/Vonage.Test/VerifyV2/NextWorkflow/E2ETest.cs
new file mode 100644
index 00000000..2e529b42
--- /dev/null
+++ b/Vonage.Test/VerifyV2/NextWorkflow/E2ETest.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Net;
+using System.Threading.Tasks;
+using Vonage.Test.Common.Extensions;
+using Vonage.VerifyV2.NextWorkflow;
+using WireMock.ResponseBuilders;
+using Xunit;
+
+namespace Vonage.Test.VerifyV2.NextWorkflow;
+
+[Trait("Category", "E2E")]
+public class E2ETest : E2EBase
+{
+ [Fact]
+ public async Task NextWorkflow()
+ {
+ this.Helper.Server.Given(WireMock.RequestBuilders.Request.Create()
+ .WithPath("/v2/verify/68c2b32e-55ba-4a8e-b3fa-43b3ae6cd1fb/next_workflow")
+ .WithHeader("Authorization", this.Helper.ExpectedAuthorizationHeaderValue)
+ .UsingPost())
+ .RespondWith(Response.Create().WithStatusCode(HttpStatusCode.OK));
+ await this.Helper.VonageClient.VerifyV2Client.NextWorkflowAsync(
+ NextWorkflowRequest.Parse(Guid.Parse("68c2b32e-55ba-4a8e-b3fa-43b3ae6cd1fb")))
+ .Should()
+ .BeSuccessAsync();
+ }
+}
\ No newline at end of file
diff --git a/Vonage.Test/VerifyV2/NextWorkflow/RequestTest.cs b/Vonage.Test/VerifyV2/NextWorkflow/RequestTest.cs
new file mode 100644
index 00000000..4329fe7c
--- /dev/null
+++ b/Vonage.Test/VerifyV2/NextWorkflow/RequestTest.cs
@@ -0,0 +1,30 @@
+using System;
+using Vonage.Test.Common.Extensions;
+using Vonage.VerifyV2.NextWorkflow;
+using Xunit;
+
+namespace Vonage.Test.VerifyV2.NextWorkflow;
+
+[Trait("Category", "Request")]
+public class RequestTest
+{
+ [Fact]
+ public void GetEndpointPath_ShouldReturnApiEndpoint() =>
+ NextWorkflowRequest.Parse(new Guid("f3a065af-ac5a-47a4-8dfe-819561a7a287"))
+ .Map(request => request.GetEndpointPath())
+ .Should()
+ .BeSuccess("/v2/verify/f3a065af-ac5a-47a4-8dfe-819561a7a287/next_workflow");
+
+ [Fact]
+ public void Parse_ShouldReturnFailure_GivenRequestIsEmpty() =>
+ NextWorkflowRequest.Parse(Guid.Empty)
+ .Should()
+ .BeParsingFailure("RequestId cannot be empty.");
+
+ [Fact]
+ public void Parse_ShouldReturnSuccess() =>
+ NextWorkflowRequest.Parse(new Guid("f3a065af-ac5a-47a4-8dfe-819561a7a287"))
+ .Map(request => request.RequestId)
+ .Should()
+ .BeSuccess(new Guid("f3a065af-ac5a-47a4-8dfe-819561a7a287"));
+}
\ No newline at end of file
diff --git a/Vonage/VerifyV2/IVerifyV2Client.cs b/Vonage/VerifyV2/IVerifyV2Client.cs
index ef56b3ac..ae46525b 100644
--- a/Vonage/VerifyV2/IVerifyV2Client.cs
+++ b/Vonage/VerifyV2/IVerifyV2Client.cs
@@ -1,6 +1,7 @@
using System.Threading.Tasks;
using Vonage.Common.Monads;
using Vonage.VerifyV2.Cancel;
+using Vonage.VerifyV2.NextWorkflow;
using Vonage.VerifyV2.StartVerification;
using Vonage.VerifyV2.VerifyCode;
@@ -18,6 +19,13 @@ public interface IVerifyV2Client
/// Success or Failure.
Task> CancelAsync(Result request);
+ ///
+ /// Move the request onto the next workflow, if available.
+ ///
+ /// The request.
+ /// Success or Failure.
+ Task> NextWorkflowAsync(Result request);
+
///
/// Requests a verification to be sent to a user.
///
diff --git a/Vonage/VerifyV2/NextWorkflow/NextWorkflowRequest.cs b/Vonage/VerifyV2/NextWorkflow/NextWorkflowRequest.cs
new file mode 100644
index 00000000..0e694799
--- /dev/null
+++ b/Vonage/VerifyV2/NextWorkflow/NextWorkflowRequest.cs
@@ -0,0 +1,40 @@
+using System;
+using System.Net.Http;
+using Vonage.Common.Client;
+using Vonage.Common.Monads;
+using Vonage.Common.Validation;
+
+namespace Vonage.VerifyV2.NextWorkflow;
+
+///
+public readonly struct NextWorkflowRequest : IVonageRequest
+{
+ private NextWorkflowRequest(Guid requestId) => this.RequestId = requestId;
+
+ ///
+ /// ID of the verify request.
+ ///
+ public Guid RequestId { get; internal init; }
+
+ ///
+ public HttpRequestMessage BuildRequestMessage() => VonageRequestBuilder
+ .Initialize(HttpMethod.Post, this.GetEndpointPath())
+ .Build();
+
+ ///
+ public string GetEndpointPath() => $"/v2/verify/{this.RequestId}/next_workflow";
+
+ ///
+ /// Parses the input into a NextWorkflowRequest.
+ ///
+ /// The verify request identifier.
+ /// A success state with the request if the parsing succeeded. A failure state with an error if it failed.
+ public static Result Parse(Guid requestId) =>
+ Result
+ .FromSuccess(new NextWorkflowRequest(requestId))
+ .Map(InputEvaluation.Evaluate)
+ .Bind(evaluation => evaluation.WithRules(VerifyRequestId));
+
+ private static Result VerifyRequestId(NextWorkflowRequest request) =>
+ InputValidation.VerifyNotEmpty(request, request.RequestId, nameof(RequestId));
+}
\ No newline at end of file
diff --git a/Vonage/VerifyV2/VerifyV2Client.cs b/Vonage/VerifyV2/VerifyV2Client.cs
index e2326e25..87e29504 100644
--- a/Vonage/VerifyV2/VerifyV2Client.cs
+++ b/Vonage/VerifyV2/VerifyV2Client.cs
@@ -3,6 +3,7 @@
using Vonage.Common.Monads;
using Vonage.Serialization;
using Vonage.VerifyV2.Cancel;
+using Vonage.VerifyV2.NextWorkflow;
using Vonage.VerifyV2.StartVerification;
using Vonage.VerifyV2.VerifyCode;
@@ -23,6 +24,10 @@ internal VerifyV2Client(VonageHttpClientConfiguration configuration) =>
public Task> CancelAsync(Result request) =>
this.vonageClient.SendAsync(request);
+ ///
+ public Task> NextWorkflowAsync(Result request) =>
+ this.vonageClient.SendAsync(request);
+
///
public Task> StartVerificationAsync(Result request) =>
this.vonageClient.SendWithResponseAsync(request);