As said verbally, it would be great not to have dozens of | Full("latest') as it will be error prone and difficult to maintain.

You could have a 
sealed trait API_VERSION
case class API_VERSION_1 extends API_VERSION
case class API_VERSION_2 extends API_VERSION

and a function that would take a req and return the Box[API_VERSION], like
def detectApiVersion(req: Request) : Box[API_VERSION] = {
  req.header("X-API-VERSION") match {
    case Full("2") => FULL(API_VERSION_2)
    case Full("latest") => FULL(API_VERSION_2)
    case Full(s) => Failure(s"Invalid API version type : ${s}")
}

Do you get the idea ?
}