It might seem that defining HTTP APIs in Scala is a solved problem. Or is it? Tasks such as generating Swagger documentation or auto-generating clients have always been a challenge. Let's fix this! We'll apply an approach of separating the description of a problem from its interpretation. This has proven to be a powerful tool in other domains(e.g. modeling side effects or database access), so let's see how it works for HTTP APIs.In this live-coding talk, we'll go through the main features of Tapir, discuss some of the design decisions and challenges, demonstrate the type-safety and how it impacts the "approachability" aspect of the API.