FsHttp 14.5.0

dotnet add package FsHttp --version 14.5.0
NuGet\Install-Package FsHttp -Version 14.5.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="FsHttp" Version="14.5.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add FsHttp --version 14.5.0
#r "nuget: FsHttp, 14.5.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install FsHttp as a Cake Addin
#addin nuget:?package=FsHttp&version=14.5.0

// Install FsHttp as a Cake Tool
#tool nuget:?package=FsHttp&version=14.5.0

<p align="center"> <img src='https://raw.githubusercontent.com/fsprojects/FsHttp/master/docs/img/logo_big.png' alt='logo' width='300' /> </p>

FsHttp ("Full Stack HTTP") is a "hackable HTTP client". It's purposes are:

  • Use it as a replacement for .http files, VSCode's REST client, Postman, and other tools as an interactive and programmable playground for HTTP requests.
  • Usable as a production-ready HTTP client for applications powered by .Net (C#, VB, F#).

👍Postman? ❤️ FsHttp!


The design principle behind FsHttp is to specify HTTP requests in a most convenient and readable way, while still being able to access the underlying Http representations for covering unusual cases. It's the best of both worlds: Convenience and Flexibility.

FsHttp is developed and maintained by @SchlenkR and @dawedawe. Feel free to leave us a message.

NuGet Badge build status

A Simple Example

An example in F#:

#r "nuget: FsHttp"

open FsHttp

http {
    POST "https://reqres.in/api/users"
    CacheControl "no-cache"
            name = "morpheus"
            job = "leader"
|> Request.send

An example in C#:

#r "nuget: FsHttp"

using FsHttp;

await Http
            name = "morpheus",
            job = "leader"


Release Notes / Migrating to new versions


Please see FsHttp on GitHub.


.Net SDK:

You need to have the latest .Net SDK installed, which is specified in ./global.json.

Build Tasks

There is a F# build script (./build.fsx) that can be used to perform several build tasks from command line.

For common tasks, there are powershell files located in the repo root:

  • ./test.ps1: Runs all tests (sources in ./src/Tests).
    • You can pass args to this task. E.g. for executing only some tests: ./test.ps1 --filter Name~'Response Decompression'
  • ./docu.ps1: Rebuilds the FsHttp documentation site (sources in ./src/docs).
  • ./docu-watch.ps1: Run it if you are working on the documentation sources, and want to see the result in a browser.
  • ./publish.ps1: Publishes all packages (FsHttp and it's integration packages for Newtonsoft and FSharp.Data) to NuGet.
    • Always have a look at ./src/Directory.Build.props and keep the file up-to-date.


  • Parts of the code is taken from the HTTP utilities of FSharp.Data.
  • Credits to all critics, supporters, contributors, promoters, users, and friends.
Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (11)

Showing the top 5 NuGet packages that depend on FsHttp:

Package Downloads

Package Description


FSharp.Data (JSON) integration package for FsHttp


JSON.Net (Newtonsoft.Json) integration package for FsHttp


Dotnet library for easy access to Swate API.


A Library under the Perla umbrella. This package gives you a small set of APIs to interact with the JSPM Generator and Skypack API. Also, this library powers the package management + importmap features of Perla Dev Server.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
14.5.0 3,403 3/5/2024
14.4.2 250 3/5/2024
14.4.1 67,308 2/5/2024
14.4.0 78,726 1/7/2024
14.2.0 767 1/5/2024
14.1.0 724 1/3/2024
14.0.0 563 1/2/2024
13.3.0 12,965 12/28/2023
13.2.0 567 12/28/2023
12.2.0-preview01 564 12/24/2023
12.1.0 1,919 11/27/2023
12.0.0 51,130 10/31/2023
11.0.0 37,370 8/5/2023
11.0.0-preview01 1,226 3/25/2023
10.0.0 171,851 11/25/2022
10.0.0-preview3 864 11/23/2022
10.0.0-preview2 1,068 11/12/2022
10.0.0-preview1 882 11/12/2022
9.1.2 29,295 6/5/2022
9.1.1 3,507 4/24/2022
9.1.0 1,663 4/19/2022
9.0.6 1,677 4/19/2022
9.0.5 1,725 4/14/2022
9.0.4 1,495 4/8/2022
9.0.3 1,388 4/8/2022
9.0.2 3,307 4/6/2022
9.0.1 1,300 4/5/2022
9.0.0 13,819 4/5/2022
8.0.1 8,076 3/6/2022
8.0.0 1,159 3/2/2022
7.0.0 37,865 12/13/2021
6.0.1 2,305 11/23/2021
6.0.0 990 11/22/2021
0.9.0 1,887 7/14/2019

     - Added 'useBaseUrl' and 'transformUrl' to Config for better composability
     - Fixed some extension methods

     - Thanks @bartelink
       Pinned FSharp.Core to 5.0.2 in all library projects
       Removed net7.0, net8.0 TFM-specific builds

     - Fixed missing explicit dependency on FSharp.Core

     - Fixed pre-configured requests

     - Added `GetList` JsonElement extension
     - (Breaking change) Separated Config and PrintHint (...and many more things in these domains)

     - (Breaking change) Renamed `Extensions.To...Enumerable` to `Extensions.To...Seq`
     - Added `toJsonList...` overloads

     - (Breaking change) Renamed types in Domain:
       BodyContent -> SinglepartContent
       RequestContent -> BodyContent
       FsHttpUrl -> FsHttpTarget
     - (Breaking change) FsHttpUrl (now FsHttpTarget) and Header restructured: method, address and queryParams are now part of the FsHttpTarget type.
     - Added `headerTransformers` to Config for better composability

     - (Breaking change) All `Response._TAsync` functions (task based) in F# require a CancellationToken now.
     - (Breaking change) Extension methods rework
     - (Breaking change) There's no more StartingContext, which means:
       we give up a little bit of safety here, for the sake of pre-configuring HTTP requests
       without specifying the URL. This is a trade-off we are willing to take.

     - added HttpMethods for better composability

     - net8.0

     - #137 / #102: Change the type for FsHttpUrl.additionalQueryParams from obj to string
     - Removed (auto opened) Async.await and Task.map/await
     - Moved (auto opened) Async.map to FsHttp.Helper.Async.map

     - #130 / #105: Add method for user-supplied cancellation token

     - #121 (Breaking change): Turning off debug logs in FSI (breaking change in signature / namespace)
     - #124: Support Repeating Query Parameters (thanks @DaveJohnson8080)
     - #106 (Breaking change): Allow filename metadata with other "parts" (thanks @dawedawe)
     - Breaking change: ContentTypeForPart custom operations should come after part definition
     - #104 (Breaking change): Automatic GZip response decompression per Default
     - Other breaking changes:
       - Removed `ContentTypeWithEncoding` and used optional `charset` parameter in `ContentType` overloads.
       - Renamed `byteArray` to `binary` in Dsl, DslCE and CSharp.
       - Caution (!!): Renamed `stringPart` to `textPart` and changed argument order for `name` and `value` in Dsl and DslCE.
       - Restructured types in Domain
       - `Helper` is a module instead of a namespace, and some things were moved.
       - All transformers in config are a list of transformers instead of a single item.
       - Removed `setHttpClient`. Please use `setHttpClientFactory` instead.
       - `setHttpClientFactory` takes a `Config` as input argument.

     -- Old release notes below --
     - #92: `expect` and `assert` pass through the original response instead of unit.

     - #93 (thanks @drhumlen): Changed content type 'text/json' to 'application/json'.
     - Http modules are always AutoOpen in both Dsl and DslCE.
     - No extra modules for builder methods.

     - #89: No more blocking requests using net5 with FSI.

     9.0.0 / 9.0.1
     - Redefined builders (see README.md).
     - Many breaking changes (see "Migrations" sections in the docu).

     - Added JSON toArray functions
     - Fixed #99: Response.saveFile should create the directory if not present.

     - Supporting netstandard2.1 again.

     - Referenced lowest possible FSharp.Core and other referenced packages version.

     - Support for netstandard2.0.
     - New 'FsHttp.NewtonsoftJson' integration package.
     - More JSON functions and defaults config.

     - #100 - Removed FSI print messages.

     - Fixed naming inconsistency for 'Response.deserialize...' functions.
     - More C# JSON functions.

     - Fix: Using GlobalConfig.Json.defaultJsonSerializerOptions as default for jsonSerialize.

     - Fixed #103: FSI response printing and initialization doesn't work out of the box anymore.

     - .Net 7 support (thank you @Samuel-Dufour)
     - Breaking change: Corrected typo "guessMineTypeFromPath" -> "guessMimeTypeFromPath"
     - Breaking change: Module 'Helper', 'HelperInternal' and 'HelperAutos' refactored
     - #115: Remove print messages when downloading streams
     - Printing: Separate print functions for response and request via Request.print and Response.print
     - Printing: Default request (IToRequest) printing in FSI
     - Removed net5.0 targets in all projects
     - PrintHint.printDebugMessages: Moved to FsHttp.Helper.Fsi.logDebugMessages as a global switch
     - #113 - Config.timeoutInSeconds bug

     - #117: Escape string for query params values (by @maciej-izak - thank you)
     (!!) This can be seen as breaking change.
     - #112: Allow to add (multiple) headers (by @Samuel-Dufour - thank you)