The BSP format is engine specific.
Since id Tech engines weren't designed to be repurposable without forking, almost every idTech-based games shipped their own specific engine fork and may have implemented incompatible variants of BSP (it exists dozens if not hundreds of variants of BSP format).
The BSP file is a binary format. The Dæmon engine supports the IBSP46 and IBSP47 formats which are Quake 3 and Wolfenstein:Enemy Territory formats (they are basically the same with a different header).
A BSP file is named this way because it stores the BSP tree (see Binary space partitioning), but in fact the BSP file stores more things than that. It also stores lightgrid, entities, it may store lightmaps (we recommend to use external ones though), and many other things.
A BSP file is usually made of multiple parts named lump which are stored one after one with an array storing their address at the beginning of the file. The format is very primitive and is hard to extend as it does not tell how many lumps there are or what kind of data each lump stores, the developer has to know it according to the version number, praying that no one reused the same version for another format.
In Dæmon ecosystem and idTech one the BSP file is never distributed alone, it is shipped within a package, a DPK one for Dæmon based games, other idTech games may ship them in packages like PK3 (Quake 3 derivatives) or PK4 (Doom 3 derivatives). For a DPK containing a BSP we usually talk about a “map pak”.
This documentation about the Q3 BSP format is good enough: https://www.mralligator.com/q3/