The day my internal API got a price tag
At EPAM I built a recommendation engine. It started as one feature on an internal video platform — the content people watched to learn and stay current.
Leadership was ready to kill it. The recommendations were bad. But the root cause was not the model. It was data. Cold start, no usage signal, nothing to learn from. So I built the data layer first, killed the over-engineered model that was there, started with simple business rules, and moved up to content-to-content models once there was signal to feed them. The recommendations got good.
Once it worked, other internal tools wanted in. So I made it an API. Plug in your user data and behavior signals, get curated content back. Any team could integrate in an afternoon.
A hundred and twenty internal tools adopted it. At that point it stopped being a feature. It was a service other products ran on.
Then the GPT-3 boom hit. Every Fortune 500 wanted personalization, but the first question was always the same: where does my data go. They wanted the capability inside their own network. So I packaged the same surface as an enterprise product using pre-trained models that could deploy on-prem, and started selling it to EPAM's customers.
First year, that commercial version did $1.2M.
Here is what I learned in the jump from internal to sold. The moment an API call gets a price, everything about it changes. The code did not change. The object did.
Internal and free, nobody counts calls. Latency is a nice-to-have. Docs are optional — you can just ping the team that built it. If it is slow, people wait, because it did not cost them anything.
Priced, every call is money. Uptime is a contract, not a courtesy. A slow response turns into a refund conversation. And the docs stop being optional — for a paying customer, the docs are the product, because they are how the customer decides whether to buy before they ever call the endpoint.
Same endpoint. Same response. A completely different thing, because now someone is paying for each hit.
The price tag also forces honesty. When it is free, everyone integrates everything and nobody thinks about which calls matter. When it costs money, you find out fast which calls people actually value. They pay for those and quietly drop the rest. Usage stops being a popularity signal and starts being a willingness-to-pay signal.
Those are two different questions. Free internal adoption told me the surface was useful — a hundred and twenty teams do not integrate something useless. But it never told me what the thing was worth. Only the price tag did that.
If you run an API, ask the question early: what changes the day this costs money. The answer touches uptime, docs, latency, and which calls you even keep. Build for that day now, while it is still cheap to change your mind.