Skip to content

๐Ÿ›  Request Customization

Supported customization types

You can customize the outgoing request using one of these supported parameters:

Parameter type Scope Description
HttpRequestBuilder.() -> Unit Lambda Adds inline modifications before sending the request.
HttpRequestBuilder Mutable object Passes a preconfigured HttpRequestBuilder instance.
HttpRequest Immutable reference Uses an already built HttpRequest for advanced scenarios.
HttpRequestData Immutable reference Uses an already built HttpRequestData for advanced scenarios.

Examples

Example โ€“ Inline customization

@GET("/profile")
suspend fun getProfile(builder: HttpRequestBuilder.() -> Unit): UserProfile

Usage:

service.getProfile {
    header("Authorization", "Bearer $token")
    expectSuccess = false
}

Example โ€“ Using a preconfigured builder

@GET("/profile")
suspend fun getProfile(builder: HttpRequestBuilder): UserProfile

Usage:

val builder = HttpRequestBuilder().apply {
    header("X-Api-Version", "2")
    parameter("mode", "compact")
}

service.getProfile(builder)

Example โ€“ Using an HttpRequest directly

@GET("/profile")
suspend fun getProfile(request: HttpRequest): UserProfile

Usage:

I don't know sincerely, sorry, but is supported!

Example - Using an HttpRequestData

@GET("/profile")
suspend fun getProfile(request: HttpRequestData): UserProfile

Usage:

val customRequest: HttpRequestData = HttpRequestBuilder("https://api.example.com/profile").build()
service.getProfile(customRequest)

Summary

  • Request customization is available through builder or request parameters.
  • Focus remains on simplicity, extensibility, and clear debugging aligned with Ktor Clientโ€™s design.