Expertise · Access to AI models
A single entry point to AI models, with team keys, limits and local billing.
We place a single entry point between the company's applications and model providers, compatible with the OpenAI interface. From there, separate keys are issued per project, with a spending cap, a list of permitted models and a list of IP addresses, and consumption is visible per key.
Already builtThe gate runs and can be checked from the outside today, without taking our word for it: the public model catalogue returns 200 and lists 106 marked active models, and the model query without a key returns 401. Under it are two in-house implementations: the billing and administration service (98 TypeScript files), which issues keys, synchronises limits with the gate and keeps the registers, and our assistant platform, which takes speech recognition and synthesis into production through the same gate, not directly to the provider. The reservations, stated here and not in the footnote: the catalogue changes from hour to hour, so any figure is written with the date next to it; there is no Anthropic model in the gate today, although our own README promises otherwise; and the automatic sending of the invoice to the state system remains in trial mode until the certificate is installed.
The problem appears the second time, not the first. The first integration with a model provider is simple: one key, one library, done. The fifth application, the third team and the second invoice in foreign currency are the moment when nobody can answer three simple questions any more — who is consuming, how much, and what happens if a script runs out of control on a Saturday night. The Gateway solves exactly that: applications no longer talk to providers, they talk to a single entry point that has the same interface as the OpenAI API, so in most libraries you change the base address and the key, not the code.
What you can check yourself, right now, without an account: the gateway’s public model catalogue responds and says what it contains. At today’s check there were 106 models, all marked active — 77 text models, of which 48 declare reasoning capabilities, 10 audio, 7 image, 7 real-time, 3 vectorisation and 2 video. The same check made by a colleague an hour and a half earlier returned 107. That is why the figure is always written with the time next to it, and on the site it should be read from the endpoint, not typed by hand.
Cost control is not a dashboard, it is a brake. A key has a spending cap, a cap period chosen from four, a list of allowed models, a list of accepted IP addresses — up to twenty, IPv4, IPv6 or blocks — and a blocking flag. When a cap is exceeded, the key is blocked automatically and the reason is written on it, so the interface can say why, instead of showing a silent state. There is also a correction that few people make: models that “think” before replying consume more at the provider than the gateway sees, so the raw cap sent below is divided by a reasoning factor calculated as the median over the user’s last thirty days, limited between one and twenty. Without this correction, a spending cap would be decorative exactly on expensive models.
The local part. The exchange rate is read from the official XML file of the National Bank of Moldova for the current day, with a five-second timeout and a fallback value from configuration when the source does not respond — a gateway is not allowed to stop because an exchange-rate site is unavailable. The tax invoice is built as XML and stored, with a cycle of states from draft to accepted or rejected. The actual submission to the state system is done with a certificate; as long as the certificate is not installed, the service remains in trial mode: the XML is generated and saved, but not sent. That is the real state and we write it, because it is the difference between “we have a tax invoice” and “we have everything needed to send it”.