diff --git a/src/Resend/IResend.cs b/src/Resend/IResend.cs
index 3829657..512c18a 100644
--- a/src/Resend/IResend.cs
+++ b/src/Resend/IResend.cs
@@ -955,6 +955,15 @@ public interface IResend
/// Segment.
Task> SegmentRetrieveAsync( Guid segmentId, CancellationToken cancellationToken = default );
+ ///
+ /// Updates a segment.
+ ///
+ /// Segment identifier.
+ /// Segment data.
+ /// Cancelation token.
+ /// Updated segment.
+ Task> SegmentUpdateAsync( Guid segmentId, SegmentData segment, CancellationToken cancellationToken = default );
+
///
/// Deletes a segment.
///
diff --git a/src/Resend/README.md b/src/Resend/README.md
index eedbb22..1f224a0 100644
--- a/src/Resend/README.md
+++ b/src/Resend/README.md
@@ -20,7 +20,7 @@ The `ResendClient` supports the following objects (and methods):
* Broadcast (List, Add, Retrieve, Update, Send, Schedule, Delete)
* Audience (List, Add, Retrieve, Delete)
* Contact (List, Add, Retrieve, Update, Delete)
-* Segment (List, Create, Retrieve, Delete)
+* Segment (List, Create, Retrieve, Update, Delete)
* Topics (List, Create, Retrieve, Update, Delete)
* Templates (List, Create, Retrieve, Update, Delete, Publish, Duplicate)
* Webhooks (List, Create, Retrieve, Update, Delete)
diff --git a/src/Resend/ResendClient.Segments.cs b/src/Resend/ResendClient.Segments.cs
index fe6232d..4cf1a68 100644
--- a/src/Resend/ResendClient.Segments.cs
+++ b/src/Resend/ResendClient.Segments.cs
@@ -54,6 +54,17 @@ public partial class ResendClient
}
+ ///
+ public Task> SegmentUpdateAsync( Guid segmentId, SegmentData segment, CancellationToken cancellationToken = default )
+ {
+ var path = $"/segments/{segmentId}";
+ var req = new HttpRequestMessage( HttpMethod.Patch, path );
+ req.Content = JsonContent.Create( segment );
+
+ return Execute( req, ( x ) => x, cancellationToken );
+ }
+
+
///
public Task SegmentDeleteAsync( Guid segmentId, CancellationToken cancellationToken = default )
{
diff --git a/src/Resend/SegmentUpdateResult.cs b/src/Resend/SegmentUpdateResult.cs
new file mode 100644
index 0000000..feab3cd
--- /dev/null
+++ b/src/Resend/SegmentUpdateResult.cs
@@ -0,0 +1,21 @@
+using System.Text.Json.Serialization;
+
+namespace Resend;
+
+///
+/// Result of updating a segment.
+///
+public class SegmentUpdateResult
+{
+ ///
+ /// Object type discriminator.
+ ///
+ [JsonPropertyName( "object" )]
+ public string Object { get; set; } = default!;
+
+ ///
+ /// Segment identifier.
+ ///
+ [JsonPropertyName( "id" )]
+ public Guid Id { get; set; }
+}
diff --git a/tests/Resend.Tests/ResendClientTests.Segment.cs b/tests/Resend.Tests/ResendClientTests.Segment.cs
new file mode 100644
index 0000000..ceec126
--- /dev/null
+++ b/tests/Resend.Tests/ResendClientTests.Segment.cs
@@ -0,0 +1,21 @@
+namespace Resend.Tests;
+
+///
+public partial class ResendClientTests
+{
+ ///
+ [Fact]
+ public async Task SegmentUpdate()
+ {
+ var segmentId = Guid.NewGuid();
+
+ var resp = await _resend.SegmentUpdateAsync( segmentId, new SegmentData()
+ {
+ Name = "Renamed segment",
+ } );
+
+ Assert.NotNull( resp );
+ Assert.NotNull( resp.Content );
+ Assert.Equal( segmentId, resp.Content.Id );
+ }
+}
diff --git a/tools/Resend.ApiServer/Controllers/SegmentController.cs b/tools/Resend.ApiServer/Controllers/SegmentController.cs
new file mode 100644
index 0000000..96ae731
--- /dev/null
+++ b/tools/Resend.ApiServer/Controllers/SegmentController.cs
@@ -0,0 +1,32 @@
+using Microsoft.AspNetCore.Mvc;
+
+namespace Resend.ApiServer.Controllers;
+
+///
+[ApiController]
+public class SegmentController : ControllerBase
+{
+ private readonly ILogger _logger;
+
+
+ ///
+ public SegmentController( ILogger logger )
+ {
+ _logger = logger;
+ }
+
+
+ ///
+ [HttpPatch]
+ [Route( "segments/{id}" )]
+ public SegmentUpdateResult SegmentUpdate( [FromRoute] Guid id, [FromBody] SegmentData data )
+ {
+ _logger.LogDebug( "SegmentUpdate" );
+
+ return new SegmentUpdateResult()
+ {
+ Object = "segment",
+ Id = id,
+ };
+ }
+}
diff --git a/tools/Resend.Cli/Segment/SegmentUpdateCommand.cs b/tools/Resend.Cli/Segment/SegmentUpdateCommand.cs
new file mode 100644
index 0000000..493944f
--- /dev/null
+++ b/tools/Resend.Cli/Segment/SegmentUpdateCommand.cs
@@ -0,0 +1,42 @@
+using McMaster.Extensions.CommandLineUtils;
+using System.ComponentModel.DataAnnotations;
+
+namespace Resend.Cli.Segment;
+
+///
+[Command( "update", Description = "Update a segment" )]
+public class SegmentUpdateCommand
+{
+ private readonly IResend _resend;
+
+ ///
+ [Argument( 0, Description = "Segment identifier" )]
+ [Required]
+ public Guid? SegmentId { get; set; }
+
+ ///
+ [Argument( 1, Description = "Segment name" )]
+ [Required]
+ public string? Name { get; set; }
+
+
+ ///
+ public SegmentUpdateCommand( IResend resend )
+ {
+ _resend = resend;
+ }
+
+
+ ///
+ public async Task OnExecuteAsync()
+ {
+ var data = new SegmentData()
+ {
+ Name = this.Name!,
+ };
+
+ await _resend.SegmentUpdateAsync( this.SegmentId!.Value, data );
+
+ return 0;
+ }
+}
diff --git a/tools/Resend.Cli/SegmentCommand.cs b/tools/Resend.Cli/SegmentCommand.cs
index 766c954..0737489 100644
--- a/tools/Resend.Cli/SegmentCommand.cs
+++ b/tools/Resend.Cli/SegmentCommand.cs
@@ -8,6 +8,7 @@ namespace Resend.Cli;
[Subcommand( typeof( Segment.SegmentDeleteCommand ) )]
[Subcommand( typeof( Segment.SegmentListCommand ) )]
[Subcommand( typeof( Segment.SegmentRetrieveCommand ) )]
+[Subcommand( typeof( Segment.SegmentUpdateCommand ) )]
public class SegmentCommand
{
///