Type safe API with built-in serialization + some docs