type-safe api