The naming of the parameter $format_id in check_markup() is quite confusing. Actually it takes the machine name of a filter format as a string.
While you could say that this machine name is indeed the ID of the filter format, a numerical ID is what would be expected. This is especially the case after in D6, the same function took a numerical ID, even though there, the parameter was simply called $format.
Confused? Mee too.
Propose to rename the parameter back to $format and to rewrite the completely uncomprehesible API documentation. How about this:
$format The machine name of the filter format to be used to filter the text. If no format is assigned, the fallback format will be used, see filter_fallback_format().