From TTWiki

The cargo the vehicle can carry.
Used like this:

<cargo num="0" capacity="250">
        <cargotype id="2">0</cargotype>
        <cargotype id="3">0</cargotype>
<cargo num="1" capacity="100">
        <cargotype id="1">0</cargotype>

num = Cargo 'block' you are setting (mail AND passengers for example). Vehicles can have up to two, use 0 for the first and 1 for the second.
id = Type of cargo for this 'block'.
capacity = tonnage of cargo type.

The meaning of the cargotype value ("0" in the examples) relates to multiple views for the same car, increased in increments of 512. For example, examining the flatbed2.xml file, one sees that the railcar can carry timber, paper or steel (listed in that order of increasing cargotypevalue: 0, 512, 1024). This corresponds to the .png files for that car, appearing in the order timber, paper, steel. The same holds true for the hopper car.

For example, the code above allows a vehicle to carry ( (coal OR iron ore) AND grain)

The ids:

0 = Unknown
1 = Grain
2 = Coal
3 = Iron Ore
4 = Chemicals/Oil (?) (May be ID for liquids in general, since tankers only have one cargo entry)
5 = Paper
6 = Steel
7 = Timber
8 = Goods
9 = Food/Grapes
10 = Unknown (currently not used)
11 = Livestock
12 = Passengers
13 = Mail

Grapes are treated as "Food" cargo type. They need a vinyard OR winery to become active as a cargo type.