Challenge 1: An API Interface — Solution data class Post( val id: Int, val title: String, val body: String ) interface PostApiService { @GET("posts") suspend fun getPosts(): List @GET("posts/{id}") suspend fun getPost(@Path("id") id: Int): Post } val retrofit = Retrofit.Builder() .baseUrl("https://jsonplaceholder.typicode.com/") .addConverterFactory(MoshiConverterFactory.create()) .build() val postApiService: PostApiService = retrofit.create(PostApiService::class.java) Notes: - getPosts() has no @Path parameter — it maps to a plain GET https://jsonplaceholder.typicode.com/posts request. - getPost(id: Int) uses @Path("id") to substitute the id parameter into the "{id}" placeholder in "posts/{id}" — calling getPost(5) requests https://jsonplaceholder.typicode.com/posts/5. - Post's property names (id, title, body) happen to match jsonplaceholder's actual JSON field names exactly, so no @Json/ @SerializedName renaming annotation is needed here — that's only required when a JSON key and the desired Kotlin property name differ. - retrofit.create(PostApiService::class.java) generates a real working implementation of the interface at runtime — no method body was ever written for getPosts() or getPost().