Quick start
From an empty machine to the first request returning results takes about ten minutes. No need to understand any concepts beforehand, just follow the steps.
Before you start §
Prepare two things:
- A machine with Docker and Docker Compose installed
- An API key for an upstream service — Use an API key from any available upstream service, such as OpenAI, Anthropic, Gemini, or DeepSeek.
No database setup is required; the built-in SQLite database is used by default. The management UI is embedded in the same program, so there is no separate frontend to deploy.
1 · Start the service §
git clone --depth 1 --branch v2 \ https://github.com/tbphp/gpt-load.git cd gpt-load cp .env.example .env docker compose up -d
Confirm the service is running:
curl --fail http://127.0.0.1:3001/health
A successful response confirms that the service is running. By default, it listens only on localhost, so it is not reachable from the public internet. This is intentional; see Security and production for safe remote access.
2 · Log in to the management UI §
The first startup generates a management key automatically. Read it with:
docker compose exec gpt-load \
sh -c 'cat /app/data/auth.key'Open http://127.0.0.1:3001 and enter this key.
To supply your own management key, set AUTH_KEY in .env before startup. ENCRYPTION_KEY encrypts upstream credentials and must be backed up with the database; without it, those credentials cannot be decrypted.
3 · Create a Group §
A Group combines an upstream service with its credentials. Open Group → Import channel credentials → Create new Group and first choose a channel:
Frequently used channels appear as buttons; choose the rest under “Other channels.”
After choosing a channel, paste the API key into the credential field, then add the models this Group should expose:
A Group can contain multiple keys. The gateway rotates between them and automatically avoids a failed key without affecting the others.
The Group is ready after you save it. See Groups and channels for details about each option.
4 · Create an AccessKey §
Groups manage upstream services; AccessKeys define what each application may use. Open AccessKey → Create new, select the Group you just created and the allowed protocols, then save.
Give the generated key to the application. The application does not need to know how many Groups or upstream keys are behind it.
5 · Send the first request §
Replace the key and model name below with your own:
export GPT_LOAD_KEY= "Your AccessKey" curl http://127.0.0.1:3001/v1/chat/completions \ -H "Authorization: Bearer ${GPT_LOAD_KEY}" \ -H "Content-Type: application/json" \ -d '{ "model": "Your model name", "messages": [{ "role": "user", "content": "Hello" }]}'
Once you receive a response, the whole path is working. Existing clients usually need only two changes:
client = OpenAI(
base_url="http://127.0.0.1:3001/v1", # Change this line
api_key= "Your AccessKey" , # Change this line
)The management UI can generate connection settings for each client, so you do not have to assemble them manually:
Choose an AccessKey and target client; the parameters are generated and ready to copy.
Next steps §
- Understand the relationship between Groups and AccessKeys → Core concepts
- Connect subscription accounts such as Codex or Claude → Subscription accounts
- Configure your own client → Client setup
- Prepare for production → Security and production
- Coming from 1.4.x → Moving from 1.x; note that 2.0 cannot be upgraded in place.