Hey,
OD Cost Matrix service charges credits per input origin and destination pair, as explained in the documentation. It isn't charged based on the output. There is also an example in the documentation, which explains a similar case to make it clear.
"If there are 100 origins and 200 destinations, the cost will be 10 credits. If you specify a cutoff, or limit the number of destinations, such as to find only the 5 closest destinations within 10 minutes of every origin, the cost will still be 10 credits, as the credits depend on the number of input origin-destination pairs."
For your analysis of 31000 origins and 800 destinations, the OD will cost 12400 credits.
I think for your problem, you could try to pre-process your inputs, to reduce the input problem size. For example, for each origin, you could find destinations within certain Euclidean distance and only use those destinations near the origin in the OD. You might only have 10 destinations near each origin after your pre-processing (depending on the distance you use) and you can use OD to find the closest one in network distance.
This Solving Large Transportation Analysis Problems presentation, explains some of the technics that can be used to pre-process the data to eliminate irrelevant data.
Hope this helps.