diff --git a/src/Ramstack.HtmxToolkit/AjaxContext.cs b/src/Ramstack.HtmxToolkit/AjaxContext.cs
index 89d91c5..3b5a166 100644
--- a/src/Ramstack.HtmxToolkit/AjaxContext.cs
+++ b/src/Ramstack.HtmxToolkit/AjaxContext.cs
@@ -42,8 +42,9 @@ public sealed class AjaxContext
///
/// Gets or sets the headers to include with the request.
+ /// Header values must be strings; complex data should be passed as a pre-serialized JSON string.
///
- public object? Headers { get; set; }
+ public IDictionary? Headers { get; set; }
///
/// Gets or sets a selector used to filter the content to swap from the response.
diff --git a/src/Ramstack.HtmxToolkit/AjaxContextWrapper.cs b/src/Ramstack.HtmxToolkit/AjaxContextWrapper.cs
index be97d27..fcd249b 100644
--- a/src/Ramstack.HtmxToolkit/AjaxContextWrapper.cs
+++ b/src/Ramstack.HtmxToolkit/AjaxContextWrapper.cs
@@ -29,6 +29,6 @@ public AjaxContextWrapper(string path, AjaxContext context)
[JsonPropertyName("target")] public string? Target => _context.Target;
[JsonPropertyName("swap")] public string? Swap => _context.Swap.GetSwapValue();
[JsonPropertyName("values")] public object? Values => _context.Values;
- [JsonPropertyName("headers")] public object? Headers => _context.Headers;
+ [JsonPropertyName("headers")] public IDictionary? Headers => _context.Headers;
[JsonPropertyName("select")] public string? Select => _context.Select;
}