The format is simply xN.[seedname], where N is the required service flags, ORed together, encoded in hex.
From Bitcoin Core's
NODE_NONE = 0,
// NODE_NETWORK means that the node is capable of serving the complete block chain. It is currently
// set by all Bitcoin Core non pruned nodes, and is unset by SPV clients or other light clients.
NODE_NETWORK = (1 << 0),
// NODE_BLOOM means the node is capable and willing to handle bloom-filtered connections.
// Bitcoin Core nodes used to support this by default, without advertising this bit,
// but no longer do as of protocol version 70011 (= NO_BLOOM_VERSION)
NODE_BLOOM = (1 << 2),
// NODE_WITNESS indicates that a node can be asked for blocks and transactions including
// witness data.
NODE_WITNESS = (1 << 3),
// NODE_COMPACT_FILTERS means the node will service basic block filter requests.
// See BIP157 and BIP158 for details on how this is implemented.
NODE_COMPACT_FILTERS = (1 << 6),
// NODE_NETWORK_LIMITED means the same as NODE_NETWORK with the limitation of only
// serving the last 288 (2 day) blocks
// See BIP159 for details on how this is implemented.
NODE_NETWORK_LIMITED = (1 << 10),
So as a hypothetical example, say you want NODE_WITNESS, NODE_COMPACT_FILTERS, and NODE_NETWORK_LIMITED, you'd need N = (1 << 3) + (1 << 6) + (1 << 10) = 1096, which is
448 in hexadecimal. Thus, you'd query
Note that not all combinations are supported, and which ones are may depend on the seed. My Bitcoin seeder software by default supports the following combinations currently:
NODE_NETWORK | NODE_BLOOM
NODE_NETWORK | NODE_WITNESS
NODE_NETWORK | NODE_WITNESS | NODE_COMPACT_FILTERS
NODE_NETWORK | NODE_WITNESS | NODE_BLOOM
NODE_NETWORK_LIMITED | NODE_BLOOM
NODE_NETWORK_LIMITED | NODE_WITNESS
NODE_NETWORK_LIMITED | NODE_WITNESS | NODE_COMPACT_FILTERS
NODE_NETWORK_LIMITED | NODE_WITNESS | NODE_BLOOM