Skip to content

engineering

Four promises behind one endpoint

Metered inference is easy to get wrong in ways a customer only finds on their invoice. Here are the four rules our request handler follows, and why each one is there.

/5 min read/engineering

A metered API makes promises whether or not anyone writes them down. Ours are written down, and all four are things you can test.

Revocation is immediate

A presented key is hashed and looked up on every request, with no cache. Caching that lookup would be the obvious optimisation and it would quietly turn "this key no longer works" into "this key stops working within a minute", which is not the same promise at all.

The balance is checked before any compute

A call we could not bill never starts, so a 402 comes back immediately rather than after the audio has been processed. The corollary is a small permitted overdraft: the true cost is only known once the audio is decoded, so refusing at exactly zero would mean doing the work and then withholding the result.

Failures are not charged

  • An inference failure is recorded for diagnostics and not metered
  • A client that disconnects before delivery is not charged, so the retry bills once
  • A metering outage withholds the result rather than delivering it unbilled

A retry is safe

Send an Idempotency-Key and the same key can never bill twice, including across a race between two of our own processes. Without one, a timeout on your side is genuinely ambiguous, which is why every snippet in our docs includes it.

curl
curl -X POST https://api.hohe.et/v1/transcribe \
  -H "Authorization: Bearer $HOHE_API_KEY" \
  -H "Idempotency-Key: meeting-2026-10-15-01" \
  -F "model=hohe-asr" \
  -F "[email protected]"

Any number a customer is charged should be explainable from history, not asserted by a row.

Two free hours of audio a month, and no card to start

Make one call, read what it cost in the response, and decide from there.