GarageAI API · for developers

One OpenAI-compatible API for open models, served from European garages

GarageAI's API at https://api.garageai.eu/v1 speaks the OpenAI format, so the OpenAI SDKs, agents and coding tools work by changing the base URL. The models run on GPUs that garage owners connect; you pay per token with prepaid credits, at the price the garage that answered has set.

curl

curl https://api.garageai.eu/v1/chat/completions \
  -H "Authorization: Bearer $GARAGEAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "garageai/auto", "messages": [{"role": "user", "content": "Hello from a European garage"}]}'

Python (OpenAI SDK)

from openai import OpenAI

client = OpenAI(base_url="https://api.garageai.eu/v1", api_key="YOUR_GARAGEAI_KEY")
reply = client.chat.completions.create(
    model="garageai/auto",
    messages=[{"role": "user", "content": "Hello from a European garage"}],
)
print(reply.choices[0].message.content)

JavaScript / TypeScript (OpenAI SDK)

import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://api.garageai.eu/v1", apiKey: process.env.GARAGEAI_API_KEY });
const reply = await client.chat.completions.create({
  model: "garageai/auto",
  messages: [{ role: "user", content: "Hello from a European garage" }],
});
console.log(reply.choices[0].message.content);

Create a key at app.garageai.eu. Streaming works the same way as with OpenAI.

Get an API keySee the live models and prices

Models and routing

Every model passes an acceptance test with a real streamed request before it is sold, and regular checks keep it in rotation.

Pricing

GarageAI has no price list of its own. Each garage sets a price per million tokens, input and output, plus a lower cache-read price for cached input, and you pay the price of the garage that served the request. Credits are prepaid by card; there is no subscription and no reserved-capacity contract. The model catalogue in the portal shows each model’s prices before you start.

Data and privacy

In transitTLS from you to the gateway; WireGuard from the gateway to the garage
GatewayAn EU server (Hetzner, Helsinki); stores no prompts or answers
ProcessingOn the garage owner’s machine, under terms that forbid logging or reading prompts
Not yetFormally verified garages and data-processing agreements

The privacy policy lists everything GarageAI keeps. Until verified garages and data-processing agreements are in place, don’t send sensitive or personal data.

Reliability

Requests in a pool fail over to another garage. A garage that fails health checks is taken out of rotation for a while. When the only garage serving a model is away, the API answers 503 with Retry-After instead of an error that makes agents give up.

Questions

Is the GarageAI API compatible with the OpenAI API?

Yes. It accepts OpenAI-format chat completions at https://api.garageai.eu/v1, including streaming, so the OpenAI SDKs for Python and JavaScript, agents and coding tools work by setting the base URL and your GarageAI key.

Which models can I use?

Open models that garage owners serve and that passed the acceptance test; the catalogue in the portal lists them with their prices and the garages that offer them. garageai/auto answers with a working model and names it in the response.

Where is my data processed?

Your request goes over TLS to GarageAI's gateway on an EU server (Hetzner, Helsinki), which stores no prompts or answers, and then over an encrypted WireGuard tunnel to the garage that serves the model, where it is processed. Garage owners agree not to log or read prompts, but garages are not yet formally verified, so don't send sensitive or personal data until verified garages and data-processing agreements are in place.

How does billing work?

Prepaid credits, topped up by card through Stripe, with no subscription. Each request is billed per token at the price of the garage that served it; cached input is billed at that garage's lower cache-read price. Usage is shown per key and per model in the portal.

What happens when a garage goes offline?

In a pool, the request is retried on another garage. If the only garage serving a model is away, the API answers 503 with Retry-After, which SDKs and agents retry, rather than model not found.